我已经阅读过相同论点上发布的上述问题,但我还没有想出来。
我正在尝试运行一个在命令行中没有问题的命令:
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
我也试过了不同的解决方案,比如
stringa = Popen(["ush", "-o", "PPP", "-p" "PRD", "-n", "log", '"pwd"'], stdout=PIPE, stdin=PIPE).communicate()[0]
但似乎没有任何效果。我也试图把绝对的道路放到ush但没有...... 有人可以解释一下我做错了什么吗?
提前致谢,AM。
编辑: 当我做的时候,我发生了一件奇怪的事情
which ush
我得到了
ush: aliased to nocorrect /projects/aaaaaaa/local/ush/latest/ush.py
但为什么它会起作用?
!!!谢谢大家的答案!
答案 0 :(得分:2)
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"])
答案 1 :(得分:1)
如果您系统上的ush
是别名,则popen将无效。 popen需要一个可执行文件作为第一个参数:绝对路径或PATH中的某些东西的名称。