如何使用python打印输出?

时间:2009-07-06 19:17:08

标签: python

当这个.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行打印的内容。

4 个答案:

答案 0 :(得分:5)

您尝试将呼叫结果附加到呼叫本身。您必须在没有+ str(Output)部分的情况下运行命令一次以获得输出。

以这种方式思考。假设我在一起添加一些数字。

 z = 5 + b
 b = z + 2

我必须在语句之前定义zb,具体取决于两个语句的顺序。在我知道它是什么之前我不能使用变量。在定义它之前,使用Output变量执行相同的操作。

答案 1 :(得分: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]

答案 2 :(得分:1)

只需将第一行更改为:

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

和最后的print语句:

print cmd + str(输出)

这不知道你想要打印的确切内容...... 看起来好像你的问题是在你真正定义Output变量之前尝试使用Output(如上面的帖子所示)

答案 3 :(得分:0)

就像你说的那样,必须在使用之前声明变量。因此,当您致电str(Output) ABOVE Output = outputlist[5]时,输出尚不存在。您首先需要实际呼叫:

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

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

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

应该是print cmd_return正上方的行。