[英]Python: Use backquotes in command given to subprocess.Popen function
我试图从python3脚本执行如下所示的Unix命令:
mycommand `cmd_giving_a_path`/file
所以我正在使用subprocess.Popen函数。 但是无论我尝试了什么,子进程都不会在反引号之间评估命令。 这是我尝试过的:
>>> subprocess.Popen(['echo', 'toto'])
<subprocess.Popen object at 0x2a98df1c50>
>>> toto
精细!
subprocess.Popen(['echo', 'toto', '`ls`'])
<subprocess.Popen object at 0x2a98df1d50>
>>> toto `ls`
没关系!
>>> subprocess.Popen(['echo', 'toto', '`ls`'], shell=True)
<subprocess.Popen object at 0x2a98df1d90>
我不明白这一点:我根本没有输出。 使用此命令,我希望生成一个shell并接收以下命令:
echo toto `ls`
但是显然,我错了!
有人可以帮忙吗?
谢谢!
PS:对于那些可能问“为什么需要这个?”的人 答案是:因为命令的选项是从可能包含这种语法的输入文件中读取的。
按预期工作:
subprocess.Popen('echo toto `ls`', shell=True)
来自子进程的pydoc文档: 在UNIX上,使用shell = True:如果args是字符串,则它指定要通过shell执行的命令字符串。 如果args是序列,则第一项指定命令字符串, 任何其他项将被视为其他shell参数 。
即,您正在告诉子进程运行以下命令:
bash -c 'echo' 'toto' '`ls`'
正如ephemient指出的,您真正想要运行的是:
bash -c 'echo toto `ls`'
您可以使用以下任一方法进行操作:
subprocess.Popen('echo toto `ls`', shell=True)
subprocess.Popen(['echo toto `ls`'], shell=True)
我不熟悉您的处理方式,但是可以使用面料吗?
链接: http : //docs.fabfile.org/en/1.4.0/index.html
我认为编写一个从文件读取并使用结构执行这些命令的函数会很简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.