我如何格式化命令参数,这些参数本身就是一组使用Python的命令';s子流程模块?
在我如何格式化命令参数,这些参数本身就是一组使用Python的命令';s子流程模块?,python,python-2.7,subprocess,popen,Python,Python 2.7,Subprocess,Popen,在MyCWD内运行的命令(变量捕获工作目录): vagrant ssh-c“cd/Path/To/Dir&./my-shell-script.sh-d argD-f argF” 我尝试过这样做,但没有成功: vagrantCmd = ['vagrant','ssh','-c', 'cd', '/Path/To/Dir', '&&', './my-shell-script.sh', '-d', '-argD', '-f',
MyCWD
内运行的命令(变量捕获工作目录):
vagrant ssh-c“cd/Path/To/Dir&./my-shell-script.sh-d argD-f argF”
我尝试过这样做,但没有成功:
vagrantCmd = ['vagrant','ssh','-c',
'cd', '/Path/To/Dir', '&&',
'./my-shell-script.sh', '-d', '-argD', '-f', 'argF']
output,error = subprocess.Popen(command, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=MyCWD).communicate()
但是,如果我这样做,它只会起作用:
argCmd = ['cd', '/Path/To/Dir', '&&',
'./my-shell-script.sh', '-d', '-argD', '-f', 'argF']
os.chdir(MyCWD)
os.system('vagrant ssh -c "%s"' % ' '.join(argCmd))
后者似乎简单得多,但不再推荐使用os.system
。我怎样才能使它与subprocess.Popen()一起工作
我根据一些设置构建数组(argCmd
)。基本上,我构建了这样的数组,然后尝试将它们传递给subprocess.Popen
,但这种奇怪的字符串构建总是让我对该模块感到头痛,但对于os.system
来说,这是非常琐碎的。如何有效地处理字符串和子流程?我会尝试以下方法:
ok = ['vagrant', 'ssh', '-c']
v = '"{}"'.format
sub = 'cd /Path/To/Dir && ./my-shell-script.sh -d -argD -f argF'
ok.append(v(pipes.quote(sub)))
以及:
见:
。。。基本上是逃跑的包装。也许是个装修工?或者像这样的花哨的东西。如何处理Python代码:
vagrant ssh -c cd /Path/To/Dir && ./my-shell-script.sh -d argD -f argF
您需要的:
vagrant ssh -c "cd /Path/To/Dir && ./my-shell-script.sh -d argD -f argF"
如何修复它
vagrantCmd = ['vagrant','ssh','-c',
' '.join(['cd', '/Path/To/Dir', '&&',
'./my-shell-script.sh', '-d', '-argD', '-f', 'argF'])]
我确实试过了……但由于某种原因,一切都不起作用——连接似乎不包含子进程的双引号……我已经修复了它,@PhD
vagrantCmd = ['vagrant','ssh','-c',
' '.join(['cd', '/Path/To/Dir', '&&',
'./my-shell-script.sh', '-d', '-argD', '-f', 'argF'])]