无法从python获取shell脚本运行的输出

2024-04-30 01:22:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用不同的路径作为参数多次运行一个脚本,并查看输出。在

如果我在命令提示符下运行带有参数path_to_code/code1.cpp的脚本path/lizard

path/lizard path_to_code/code1.cpp

我得到输出-我想在多个文件上运行这个脚本。在

看着this和类似的问题,我试着

^{pr2}$

没有输出。在

import glob, subprocess

def run_command(command):
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    out, err = p.communicate()
    print out

program = '"C:/Python27/Scripts/lizard.bat "'
path = '"path_to_code/*.cpp"'
for path1 in glob.glob(path):
    command = program + path1
    run_command(command)

没有输出。在

(当然,我希望递归地遍历目录,但这是下一步)。在

如何从脚本中获取运行程序的输出?我认为逻辑上两个版本都应该给我输出。。。我做错什么了?在


Tags: topathrun脚本参数codeoutprogram
3条回答

据我所见,你忘了打电话沟通。试试看

def run_command(command):
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = p.communicate()
    return iter(stdout, b'')

https://docs.python.org/2/library/subprocess.html?highlight=popen.communicate#subprocess.Popen.communicate

干杯

根据对我问题的评论,我试着

program = 'C:/Python27/Scripts/lizard.bat'
...
command = [program, path1]

成功了-然后我意识到引用是问题所在,伊坦·赖斯纳是对的。消除他们使它成功。在

完整的更正代码:

^{pr2}$

尝试使用subprocess.check_output

它应该做你想做的。在

[~] cat foo.sh
#!/bin/sh

echo "Hello World!"

[~] python2.7
Python 2.7.6 (default, Sep  9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> foo = subprocess.check_output('./foo.sh')
>>> foo
'Hello World!\n'
>>>

所以在你的具体例子中

^{pr2}$

相关问题 更多 >