解释器中的Python解释器

时间:2017-05-29 21:00:07

标签: python subprocess interpreter

所以我学习了Python subprocess模块。在解释器的帮助下,我键入了subprocess.call("python"),并在现有的解释器中打开了另一个解释器,事情变得非常奇怪。打字时,我注意到有些字符没有被正确回显,我不得不反复输入。此外,普通的Enters(或返回)在屏幕上添加的不仅仅是V形符号。这是输出的一部分:

Interpreter within Interpreter

有人可以解释发生了什么吗?我知道这个问题可能过于宽泛或含糊不清,但我无法在此具体说明。

1 个答案:

答案 0 :(得分:1)

我会尽量让它重现,以便你能看到碰撞。

  1. python
  2. import os; os.getpid();#我们需要这个,把它拿到剪贴板或其他东西

      

    296236#对我来说

  3. import subprocess

  4. subprocess.Popen('python')

  5.   

    <subprocess.Popen object at somewhere_over_the_rainbow>#object被创建,python可能等待机会将其作为命令推送到控制台&#34; python&#34;

         

    >>>

    1. <import&get pid>
    2.   

      296236#命令被推送,新进程产生

      您将另一个Python进程生成到当前打开的控制台中,已经等待输入。 &#34;孩子&#34;过程现在存在,但仍然不能要求获得输入,因为主要的仍然是在转弯时#34;。想象它就像一个队列。 import os;os.getpid()的输出现在仍然是主要流程&#39; PID和现在孩子轮到他了。

      1. <import&get pid>
      2.   

        296236

             

        >>> Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information.#来自第二个流程,它反过来做了它的东西,现在主要流程想要谈谈

          主要流程中的
        1. <import&get pid>
        2.   

          296236

          1. <import&get pid>#在第二个过程中
          2.   

            296800

              主要流程中的
            1. <import&get pid>
            2.   

              296236

              1. <import&get pid> #in second process
              2.   

                296800

                ......并且一次又一次地交替。当您想要exit()时,乐趣就开始了,因为对输入的争夺仍在继续:

                1. import os;os.getpid();exit() #in second process
                2.   

                  296800

                       

                  和干净的空行

                  1. import os;os.getpid();exit() #in main process
                  2.   

                    296236

                         

                    C:\some folder>

                    基本上它会为队列中的IO操作而战,因为你做了一些愚蠢的事情。如果您需要使用它,只需解释一个文件,绝对不是在已经打开的解释器中,而是在一个单独的文件中。例如:

                    <强> main.py

                    import subprocess
                    subprocess.Popen('python other.py')
                    

                    <强> other.py

                    print('hello')
                    exit()
                    

                    <强>控制台

                    python main.py