如何使用Python打印输出?

3
当这个.exe文件运行时,它会打印出一屏幕的信息,我想将特定的一行输出到屏幕上,这里是第"6"行:
    cmd =  ' -a ' + str(a) + ' -b ' + str(b) + str(Output)
    process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE)
    outputstring = process.communicate()[0]
    outputlist = outputstring.splitlines()
    Output = outputlist[5]
    print cmd

这个可以正常工作:

cmd = ' -a ' + str(a) + ' -b ' + str(b)

这个不行:

cmd = ' -a ' + str(a) + ' -b ' + str(b) + str(Output)

我收到了一个错误,说Output没有定义。但是当我复制和粘贴时:

    outputstring = process.communicate()[0]
    outputlist = outputstring.splitlines()
    Output = outputlist[5]

在 cmd 语句之前,它告诉我该进程未定义。当 .exe 运行时,第 6 行应打印 str(Output)

4个回答

5
您正在尝试将调用结果附加到调用本身中。您必须先运行一次命令,不带+ str(Output)部分,以获取首次输出。
这样考虑一下。假设我正在将一些数字相加。
 z = 5 + b
 b = z + 2

在这两个声明中,我必须先定义zb,具体取决于它们的顺序。在不知道变量是什么之前,我不能使用该变量。你正在做同样的事情,在定义Output变量之前使用了它。


1

移动事物不应该是一种“跳舞”的方式。这取决于“=”号左侧的内容。如果在左侧,它正在被创建;如果在右侧,它正在被使用。

就目前而言,您的示例根本无法工作,因为第一行想要输出的部分直到最后才被创建。

理解这一点最简单的方法是倒着来看。您希望将其作为最终结果呈现?

print output[5]

对吧?所以要从一个更大的字符串中获取这个,对吧?

output= outputstring.splitlines()
print output[5]

那么outputstring是从哪里来的呢?它来自某个子进程。

outputstring = process.communicate()[0]
output= outputstring.splitlines()
print output[5]

那么进程是从哪里来的呢?它是由子进程Popen创建的。

process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE)
outputstring = process.communicate()[0]
output= outputstring.splitlines()
print output[5]

那么cmd是从哪里来的呢?我不知道。你的例子没有说明执行的命令是什么。

cmd = ?  
process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE)
outputstring = process.communicate()[0]
output= outputstring.splitlines()
print output[5]

1

只需更改您的第一行:

cmd = ' -a ' + str(a) + ' -b ' + str(b)

并将末尾的打印语句更改为:

print cmd + str(Output)

这是在不确切知道要打印什么的情况下... 看起来,你的问题是在实际定义 Output 变量之前尝试使用它(就像上面的帖子)


0

就像你所说的,变量必须在使用之前声明。因此,在调用str(Output)之前,Output = outputlist[5],Output还不存在。你需要先实际调用:

cmd =  ' -a ' + str(a) + ' -b ' + str(b)

然后你可以打印该命令的输出:

cmd_return =  ' -a ' + str(a) + ' -b ' + str(b) + str(Output)

应该是直接在print cmd_return上面的那一行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接