subprocess.Popen返回命令未找到

时间:2017-02-17 03:02:10

标签: bash macos python-3.x error-handling subprocess

将一个非常简单的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

我做了一些测试,发现基本命令pwdechocd所有单词都很好,但不是ls。我尝试使用executable='/bin/bash'选项,因为它默认为/bin/sh,但没有做任何事情。

此脚本已在Ubuntu 14.04 LTS和Ubuntu 16.04 LTS上进行了测试,均可正常运行。

我正在使用Mac OSX 10.12.3 Sierra,如果这意味着在这种情况下的任何事情

非常感谢任何回复!

1 个答案:

答案 0 :(得分:1)

如果使用list调用,则需要自己拆分参数(而不是使用shell=True)。尝试:

Popen(['ls', '/Users/Nelson/Projects'], ... leave off shell=True ...)

将命令(ls)与唯一参数分开。如果你有多个参数,它们也必须彼此分开。

如果您坚持使用shell=True(大部分时间都是个糟糕的主意),请不要使用list,只需使用原始字符串:

Popen('ls /Users/Nelson/Projects', ...)