我的python子进程是否破坏了某些东西?

我的python子进程是否破坏了某些东西?,python,linux,subprocess,Python,Linux,Subprocess,我正在学习python并使用子流程模块。在阅读了几个不同的教程和关于如何使用该模块的描述之后,我的理解仍然不够牢固,因此我开始编写一些简单的代码来测试各种功能,看看一切是如何工作的 我想看看,如果我尝试多次启动同一个流程,使用以下代码,它会有什么表现: import subprocess def tpltest(x): while x > 0: try: subprocess.Popen('wordgrinder') exc

我正在学习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是否仍然存在,并遇到常规命令行提示,但光标继续滚动。我在顶部运行,没有看到额外的wordgrinder实例打开,但光标继续滚动

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

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


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

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


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

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


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

1-你的代码最多只启动一个子进程(
x
是一个字符串,因此
x-=1
应该会引发TypeError)2-
wordgrinder
可能没有在Ctrl+C上正确关闭。在终端中键入
reset
可能会有所帮助。1-您的代码最多启动一个
子进程(
x
是字符串,因此
x-=1
应引发TypeError)2-
wordgrinder
可能没有在Ctrl+C上正确关闭。在终端中键入
reset
可能会有所帮助。