将一个非常简单的python脚本写入ls
项目目录的内容后作为测试:
from subprocess import *
p = Popen(['ls /Users/Nelson/Projects'], stdout=PIPE, shell=True)
print(p.communicate()[0].decode())
它踢出了错误:
/bin/bash: ls: command not found
我做了一些测试,发现基本命令pwd
,echo
和cd
所有单词都很好,但不是ls
。我尝试使用executable='/bin/bash'
选项,因为它默认为/bin/sh
,但没有做任何事情。
此脚本已在Ubuntu 14.04 LTS和Ubuntu 16.04 LTS上进行了测试,均可正常运行。
我正在使用Mac OSX 10.12.3 Sierra,如果这意味着在这种情况下的任何事情
非常感谢任何回复!
答案 0 :(得分:1)
如果使用list
调用,则需要自己拆分参数(而不是使用shell=True
)。尝试:
Popen(['ls', '/Users/Nelson/Projects'], ... leave off shell=True ...)
将命令(ls
)与唯一参数分开。如果你有多个参数,它们也必须彼此分开。
如果您坚持使用shell=True
(大部分时间都是个糟糕的主意),请不要使用list
,只需使用原始字符串:
Popen('ls /Users/Nelson/Projects', ...)