我遇到了 Python 子进程模块的问题。即,使用 subprocess.run() 方法调用另一个 Python 脚本。问题似乎出在 Popen 构造函数中。我收到的错误是这样的:“OSError:[Errno 8] Exec 格式错误:PosixPath。”解释器似乎无法识别文件路径,或者我提供的参数不正确。任何帮助将非常感激。我做了一些挖掘,但无法查明问题或如何解决它!
我的代码(错误在最后一行):
#!/usr/bin/env python
import tkinter as tk
from tkinter import ttk, messagebox
import subprocess
from pathlib import Path
def input_window(process_select):
input_window = tk.Toplevel(root)
input_window.title("Input")
input_window.geometry(f"+{int(x)}+{int(y)}")
input_label = tk.Label(input_window,text = "Enter trial name")
input_label.pack(pady = 10)
input_var = tk.StringVar()
input_entry = tk.Entry(input_window,textvariable = input_var)
input_entry.pack(pady = 10)
def execute_code(process_select):
trial_name = input_vgar.get()
input_window.destroy()
if process_select == 1:
file_path = Path(__file__).with_name("MyFile.py")
subprocess.run(file_path,text = True,input = trial_name)
这是包含相关信息的回溯:
File "/home/username/Desktop/.../CallingFile.py", line 28, in execute_code
subprocess.run(file_path,text = True,input = trial_name)
File "/usr/lib/python3.10/subprocess.py", line 503, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/lib/python3.10/subprocess.py", line 971, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.10/subprocess.py", line 1863, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: PosixPath('/home/username/Desktop/.../MyFile.py')
我尝试了不同的解决方法,例如切换参数的顺序或使用列表(顺序化),以及使用 Python 的路径调用文件。对于前两个解决方法,我只是收到不同的错误消息。最后的解决方法导致我出现此错误。
这看起来像是 MyFile.py 的问题,而不是您包含的代码的问题。
MyFile.py 的权限是什么?它可以执行吗?您可以通过以下方式修复权限:
chmod +x MyFile.py
MyFile.py 是否以
#!/usr/bin/env python
或类似的 #!
python
结构开头?
你可以从 shell 运行 MyFile.py 吗?
./MyFile.py