3

当我使用来自其他脚本的 subproccess 启动我的 python3 脚本时,我收到以下错误:

Select the keyword preset you want to use:Traceback (most recent call last):
  File "test2.py", line 9, in <module>
    keywordselect=input("Select the keyword preset you want to use:")
EOFError

但是当我用 python3 generate.py 正常启动脚本时,它工作得很好,没有错误。

脚本1:

import subprocess
p = subprocess.Popen(["python3", "test2.py"])

脚本2:

print("Keyword")
print("1. Preset1")
print("2. Preset2")
print("3. Preset3")
print("4. Preset4")
print("You can edit the presets in /presets/keywords/.")
selecting = 1
while selecting == 1:
    keywordselect=input("Select the keyword preset you want to use:")
    if keywordselect == "1":
        print("You selected keyword preset 1.")
        selectedkeywordlist = "presets/keywords/preset1.txt"
    elif keywordselect == "2":
        print("You selected keyword preset 2.")
        selectedkeywordlist = "presets/keywords/preset2.txt"
    elif keywordselect == "3":
        print("You selected keyword preset 3.")
        selectedkeywordlist = "presets/keywords/preset3.txt"
    elif keywordselect == "4":
        print("You selected keyword preset 4.")
        selectedkeywordlist = "presets/keywords/preset4.txt"
    else:
        print("You didn't select a valid option, please try again.")
4

2 回答 2

2

您正在使用subprocess.Popen默认情况下的非阻塞代码段,因此您编程光标移动而不是等待用户的输入。但是你需要的是一个阻止你的程序光标的代码。subprocess.call正是这样做的。它将等待另一个命令完全执行。

你需要用它subprocess.call来解决你的问题。只需使用此更改您的 script2 文件

import subprocess
p = subprocess.call(["python", "abca.py"])

您可以在此答案subprocess.Popen中阅读有关和之间区别的更多信息。其中描述了何时使用哪个命令以及它们之间的区别subprocess.call

于 2018-08-20T11:03:43.197 回答
0

您必须重定向stdinstdout通过调用script2.py,可以为此使用subporcess.PIPE

p = subprocess.Popen(["python3", "test2.py"], stdin=subprocess.PIPE, 
                     stdout=subprocess.PIPE)
于 2018-08-20T10:59:32.357 回答