从子进程开始时出现 EOFError
EOFError when starting with 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.")
您必须通过 script2.py
的调用重定向 stdin
和 stdout
,为此可以使用 subporcess.PIPE:
p = subprocess.Popen(["python3", "test2.py"], stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
您正在使用 subprocess.Popen
,这是默认情况下的非阻塞代码段,因此您编写光标移动程序而不是等待用户输入。但是你需要的是一个代码来阻止你的程序光标。 subprocess.call
确实如此。它将等待其他命令完全执行。
您需要使用subprocess.call
来解决您的问题。只需用这个
更改您的 script2 文件
import subprocess
p = subprocess.call(["python", "abca.py"])
您可以在 this answer 中详细了解 subprocess.Popen
和 subprocess.call
之间的区别。其中描述了何时使用哪个命令以及它们之间的区别
当我使用其他脚本的子进程启动我的 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.")
您必须通过 script2.py
的调用重定向 stdin
和 stdout
,为此可以使用 subporcess.PIPE:
p = subprocess.Popen(["python3", "test2.py"], stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
您正在使用 subprocess.Popen
,这是默认情况下的非阻塞代码段,因此您编写光标移动程序而不是等待用户输入。但是你需要的是一个代码来阻止你的程序光标。 subprocess.call
确实如此。它将等待其他命令完全执行。
您需要使用subprocess.call
来解决您的问题。只需用这个
import subprocess
p = subprocess.call(["python", "abca.py"])
您可以在 this answer 中详细了解 subprocess.Popen
和 subprocess.call
之间的区别。其中描述了何时使用哪个命令以及它们之间的区别