我无法使用命令中包含*
符号的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运行相同的命令时,我没有收到错误。
答案 0 :(得分:6)
*
,您需要将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)