无法使用python子进程模块

时间:2015-12-10 13:49:52

标签: python linux shell subprocess

我无法使用命令中包含*符号的python子进程模块运行任何命令。 我这样使用这个电话,

 subprocess.Popen(
            'cp /etc/varnida_sys/* /tmp/bucket/'.split(),
            stdout=subprocess.PIPE).communicate()[0]

为此我得到了,

cp: cannot stat ‘/etc/varnida_sys/*’: No such file or directory

为什么会出现此错误, / etc / varnida_sys / genders 中有一个文件

我的调查显示使用像*这样的正则表达式需要一些特殊处理。我在包含*。

的所有命令中收到一些错误

PS。当我从远程主机通过paramiko运行相同的命令时,我没有收到错误。

1 个答案:

答案 0 :(得分:6)

只有shell(将其扩展为文件列表)才能理解

*,您需要将shell=True传递给Popen()。此外,无需拆分命令,您可以使用字符串:

subprocess.Popen("cp /etc/varnida_sys/* /tmp/bucket/",
                 stdout=subprocess.PIPE, shell=True).communicate()[0]

正如@triplee在下面建议的那样,最好为这项任务使用一些便利包装器,例如: subprocess.call()

subprocess.call("cp /etc/varnida_sys/* /tmp/bucket/", shell=True)