Python 2.6通过subprocess调用Perl脚本无输出,求技术帮助
解决Python 2.6调用Perl脚本无输出的问题
嘿,我来帮你排查这个问题!你的代码里有个关键的小错误导致了没有输出,另外还有几个需要确认的点,咱们一步步来:
核心问题:shell=True与命令参数的搭配错误
当你设置shell=True时,subprocess.Popen的命令参数应该是单个字符串,而不是列表。你现在传了['perl','Hello.pl']加上shell=True,shell会把整个列表当成一个完整的命令名去查找,自然找不到对应的程序,所以没有任何输出。
修正方案1:推荐——去掉shell=True(更安全高效)
直接传递命令列表,让subprocess直接执行,不需要shell解析:
import subprocess result = subprocess.Popen(['perl', 'Hello.pl'], stdout=subprocess.PIPE) out, err = result.communicate() print out
修正方案2:如果必须用shell=True(不推荐)
把命令合并成一个字符串,让shell正确解析:
import subprocess result = subprocess.Popen('perl Hello.pl', stdout=subprocess.PIPE, shell=True) out, err = result.communicate() print out
额外需要确认的点
- Hello.pl的位置:确保脚本在Python代码的当前工作目录下,或者使用绝对路径(比如
['perl', '/home/you/scripts/Hello.pl']) - Hello.pl本身的输出:先手动运行
perl Hello.pl,确认脚本确实会输出内容(比如脚本里要有print "Hello from Perl!\n";这样的代码) - 执行权限(Linux/macOS):如果是类Unix系统,确保脚本有执行权限,或者像你现在这样用
perl命令直接调用(这一步你已经做了,所以大概率不是问题)
内容的提问来源于stack exchange,提问作者KaverappaKU
相关产品推荐
相关产品推荐

