如何在Python中打印输出?

3 投票
4 回答
632 浏览
提问于 2025-04-15 12:43

当这个 .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 个回答

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 变量之前就想使用它(就像上面的帖子提到的那样)。

5

你正在尝试把一个调用的结果添加到这个调用本身里。首先,你得先执行一次命令,不加 + str(Output) 这一部分,才能得到输出。

可以这样想:假设我在加一些数字。

 z = 5 + b
 b = z + 2

我必须在语句之前定义 z 或者 b,这取决于这两个语句的顺序。在我知道一个变量是什么之前,是不能使用它的。你现在做的事情也是一样,在定义 Output 之前就使用了它。

撰写回答