繁体   English   中英

无法使用python子进程模块运行带有*的shell命令

[英]Unable to run shell commands with * using python subprocess module

我无法使用包含*登录命令的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运行相同的命令时,没有出现错误。

*仅由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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM