在linux中运行命令时,Python Popen、OS和命令都不返回任何内容
所以我需要在客户机上获取某个东西的版本,当我尝试使用Popen、Call、Check_、Call、OS、Commands时,它都返回一个值为零的值。当我在putty中的系统上运行脚本时,它会返回一个空行。是因为油灰吗?。在Linux和CentOS上运行,如果这有什么区别的话。提前谢谢你们在linux中运行命令时,Python Popen、OS和命令都不返回任何内容,python,python-2.7,subprocess,Python,Python 2.7,Subprocess,所以我需要在客户机上获取某个东西的版本,当我尝试使用Popen、Call、Check_、Call、OS、Commands时,它都返回一个值为零的值。当我在putty中的系统上运行脚本时,它会返回一个空行。是因为油灰吗?。在Linux和CentOS上运行,如果这有什么区别的话。提前谢谢你们 def getJavacVer(): p = sp.Popen("javac -version", stdout=sp.PIPE, shell=True) (output, err) = p.c
def getJavacVer():
p = sp.Popen("javac -version", stdout=sp.PIPE, shell=True)
(output, err) = p.communicate()
print output
这将仅在*nix:
import commands
print commands.getstatusoutput('javac -version')
javac程序通过stderr返回-version输出,因此还需要传递Popen的stderr参数。尝试:
>>> from subprocess import Popen
>>> from subprocess import PIPE
>>> p = Popen(['javac', '-version'], stdout=PIPE, stderr=PIPE)
>>> p.communicate()
(b'', b'javac 1.8.0_171\n')
结果的第二个元素是stderr流的捕获输出,其中包含版本号。感谢为数不多的人回答了这个问题。输出被输出到stderr而不是stdout。谢谢大家可能的解决方案是为javac提供完整的路径。此外,还应安装管道并进行检查。你可能会在那里找到一些东西哇,好吧,这很有趣。谢谢你回答我的问题。我还有一个第二个问题,是否有任何理由将其返回给stderr?它背后的开发人员可能认为这些特定的输出不属于标准流-但是,这些决定取决于编写程序的人,因此您必须询问他们。