如何在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 语句之前时,它又告诉我这个过程没有定义。str(Output)
应该是当 .exe 运行时在第6行打印的内容。
4 个回答
移动东西并不是一场“舞蹈”。关键在于“=”左边的内容。如果在左边,那就是在创建;如果在右边,那就是在使用。
就目前的情况来看,你的例子根本无法运行,因为第一行想要输出的部分,直到最后才会被创建。
理解这个问题最简单的方法是倒着思考。你想要的最终结果是什么?
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]
只需要把你的第一行改成:
cmd = ' -a ' + str(a) + ' -b ' + str(b)
然后把最后的打印语句改成:
print cmd + str(Output)
这样做是因为我不太清楚你到底想打印什么……看起来你的问题是你在定义 Output 变量之前就想使用它(就像上面的帖子提到的那样)。
你正在尝试把一个调用的结果添加到这个调用本身里。首先,你得先执行一次命令,不加 + str(Output)
这一部分,才能得到输出。
可以这样想:假设我在加一些数字。
z = 5 + b
b = z + 2
我必须在语句之前定义 z
或者 b
,这取决于这两个语句的顺序。在我知道一个变量是什么之前,是不能使用它的。你现在做的事情也是一样,在定义 Output
之前就使用了它。