我的python子进程破坏了什么吗?

2024-10-01 00:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习python并使用子进程模块。在阅读了几个不同的教程和如何使用该模块的描述之后,我的理解仍然不够扎实,所以我开始编写一些简单的代码来测试各种函数,看看它们是如何工作的

我想看看如果我尝试多次启动同一个进程,它会有什么表现,使用以下代码:

import subprocess

def tpltest(x):
    while x > 0:
        try:
            subprocess.Popen('wordgrinder')
        except:
            print 'something broke!'
        x -= 1

x = raw_input('how many?')
tpltest(x)

当我在终端上运行这个程序时,wordgrinder(终端字处理器)正常打开,但是光标以每秒一行的速度向下移动。它似乎只是移动,而不是在屏幕上添加到空白文件中的任何字符。我按ctrl+c查看关闭第一个实例后wordgrinder是否仍然存在,并遇到常规命令行提示,但光标继续滚动。我运行top,没有看到额外的wordgrinder实例打开,但是光标继续滚动

然后我发现了最奇怪的部分。如果我在窗口中向上滚动鼠标滚轮,窗口内容上就会出现大块的文本。其中一些是我过去一周在控制台中输入的命令,一些是我在python shell中输入的命令,但不是常规终端,一些文本是我的WiFi安全信息,包括我网络的明文WPA2密码。向下滚动鼠标滚轮没有效果,但向上滚动会用新文本覆盖几行,似乎是来自我系统中其他随机位置的文本。关闭终端窗口并打开一个新窗口后,一切恢复正常

我用XFCE运行Debian 8 64位,并使用默认的终端仿真器

我的代码做了什么,为什么


Tags: 模块实例代码文本命令终端进程教程
1条回答
网友
1楼 · 发布于 2024-10-01 00:22:32

我可以提供的解释是,subprocess所做的是运行后台进程。此外,wordgrinder是一个程序,它通过捕获来自键盘(stdin)的输入并以非常特殊的方式控制命令行(stdout),从而完全控制终端会话

当你在后台运行wordgrinder来浏览你的脚本时,它导致了一些奇怪的事情发生。你的WiFi密码被你的实验显示出来真是太疯狂了

相关问题 更多 >