Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中运行命令时,Python Popen、OS和命令都不返回任何内容_Python_Python 2.7_Subprocess - Fatal编程技术网

在linux中运行命令时,Python Popen、OS和命令都不返回任何内容

在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

所以我需要在客户机上获取某个东西的版本,当我尝试使用Popen、Call、Check_、Call、OS、Commands时,它都返回一个值为零的值。当我在putty中的系统上运行脚本时,它会返回一个空行。是因为油灰吗?。在Linux和CentOS上运行,如果这有什么区别的话。提前谢谢你们

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?它背后的开发人员可能认为这些特定的输出不属于标准流-但是,这些决定取决于编写程序的人,因此您必须询问他们。