Python Popen无法处理在shell中运行的命令
我已经阅读了同一论点上的问题,但我还没有弄明白 我正在尝试运行一个命令,该命令可以在命令行中正常工作:Python Popen无法处理在shell中运行的命令,python,subprocess,popen,Python,Subprocess,Popen,我已经阅读了同一论点上的问题,但我还没有弄明白 我正在尝试运行一个命令,该命令可以在命令行中正常工作: xyz@klm:~/python-remoteWorkspace/PyLogParser/src:18:43>ush -o PPP -p PRD -n log 'pwd' 6:43PM PPP:prd:lgsprdppp:/ama/log/PRD/ppp 但当我在python中执行相同操作时,总是会出现错误: stringa = Popen(["ush -o PPP -p PRD -n
xyz@klm:~/python-remoteWorkspace/PyLogParser/src:18:43>ush -o PPP -p PRD -n log 'pwd'
6:43PM PPP:prd:lgsprdppp:/ama/log/PRD/ppp
但当我在python中执行相同操作时,总是会出现错误:
stringa = Popen(["ush -o PPP -p PRD -n log 'pwd'"], stdout=PIPE, stdin=PIPE).communicate()[0]
这里是错误
Traceback (most recent call last): File "getStatData.py", line 134, in <module>
retrieveListOfFiles(infoToRetList) File "getStatData.py", line 120, in retrieveListOfFiles
stringa = Popen(["ush -o PPP -p PRD -n log 'pwd'"], stdout=PIPE, stdin=PIPE).communicate()[0] File "/opt/python-2.6-64/lib/python2.6/subprocess.py", line 595, in __init__
errread, errwrite) File "/opt/python-2.6-64/lib/python2.6/subprocess.py", line 1092, in _execute_child
raise child_exception OSError: [Errno 2] No such file or directory
但似乎什么都不管用。我也尝试过将绝对路径设置为ush,但什么都没有。。。
谁能解释一下我做错了什么
我先谢谢你
编辑:
当我这样做的时候,我有一件奇怪的事情发生
which ush
我明白了
但是为什么它会起作用呢
!!!谢谢大家的回答
Popen(["ush", "-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])
应该是对的。shell命令中围绕'pwd'
的额外引号使其成为单个参数,但引号实际上并没有传递。由于您已经在拆分参数,请将多余的引号去掉
显然(在OP的更新中)
ush
是一个shell别名。因此,它只在壳中膨胀;在其他任何地方,它都不起作用。自己扩展它:
Popen(["nocorrect", "/projects/aaaaaaa/local/ush/latest/ush.py",
"-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])
应该是对的。shell命令中围绕'pwd'
的额外引号使其成为单个参数,但引号实际上并没有传递。由于您已经在拆分参数,请将多余的引号去掉
显然(在OP的更新中)
ush
是一个shell别名。因此,它只在壳中膨胀;在其他任何地方,它都不起作用。自己扩展它:
Popen(["nocorrect", "/projects/aaaaaaa/local/ush/latest/ush.py",
"-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])
如果系统上的
ush
是别名,则popen将不起作用。popen需要一个可执行文件作为第一个参数:绝对路径或路径中某物的名称。如果系统上的ush
是别名,popen将无法工作。popen需要一个可执行文件作为第一个参数:绝对路径或路径中某物的名称。ush-o PPP-p PRD-n log“pwd”从命令行起作用吗?当然,响应在这里PPP:PRD:lgsprdppp:/ama/log/PRD/PPP请改进格式。插入代码块时,请使用{}
。您的import
语句是什么样的?您好,这里是我的import。。。在子流程导入Popen中,pipedoush-o PPP-p PRD-n log'pwd'
从命令行工作吗?当然,响应在PPP:PRD:lgsprdppp:/ama/log/PRD/pppp上方请改进格式。插入代码块时,请使用{}
。您的import
语句是什么样的?您好,这里是我的import。。。从子流程导入Popen,PIPEHi,感谢您回答stringa=Popen([“ush”、“-o”、“PPP”、“-p”、“PRD”、“-n”、“log”、“pwd”]、stdout=PIPE、stdin=PIPE)。communicate()[0]得到相同的结果OSError:[Errno 2]没有这样的文件或目录hi,感谢您回答stringa=Popen([“ush”、“-o”、“PPP”、“-p”、“-p”、“PRD”、“-n”、“log”、“pwd”],stdout=PIPE,stdin=PIPE).communicate()[0]得到相同的结果。错误:[Errno 2]没有这样的文件或目录它肯定是一个别名,可能是因为这个原因。。。如果我制作一个shell脚本,在它的内部调用ush呢??然后我从python中调用shell脚本,它应该工作吗?它肯定是一个别名,可能就是因为这个原因。。。如果我制作一个shell脚本,在它的内部调用ush呢??然后我从python中调用shell脚本,它应该工作吗?
Popen(["nocorrect", "/projects/aaaaaaa/local/ush/latest/ush.py",
"-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])