Popen获取TypeError:预期的str,字节或os.PathLike对象,而不是Linux上的元组

问题描述

您好,我正尝试使用Popen打开.py并将arg(如有必要)传递给它。

例如:

python mytool.py --first-arg player1 player2 player3 --second-arg 10 --tenth-arg 150

我正在使用tkinter按钮启动此功能,它在Windows上运行,使用python 3.7 但不在Linux上,出现此错误

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.7/tkinter/__init__.py",line 1705,in __call__
    return self.func(*args)
  File "mytool.py",line 131,in start
    obj = subprocess.Popen([self.Tipvar.get(),'mytool.py',*filter(lambda x: bool(x[1]),(first_arg,second_arg,third_arg,fourth_arg,fifth_arg,sixth_arg,seventh_arg,eighth_arg,ninth_arg,tenth_arg,eleventh_arg,twelfth_arg))])
  File "/usr/lib/python3.7/subprocess.py",line 775,in __init__
    restore_signals,start_new_session)
  File "/usr/lib/python3.7/subprocess.py",line 1453,in _execute_child
    restore_signals,start_new_session,preexec_fn)
TypeError: expected str,bytes or os.pathLike object,not tuple

我正在使用的代码是这样的:

def start(self):
    first_arg = ("--first-arg ",self.first_arg_entry.get())
    second_arg =   ("--second-arg ",self.second_arg_entry.get())
    third_arg = ("--third_arg-arg ",self.third_arg_entry.get())
    fourth_arg = ("--fourth-arg ",self.fourth_arg_entry.get())
    fifth_arg = ("--fifth-arg ",self.fifth_arg_entry.get())
    sixth_arg = ("--sixth-arg ",self.sixth_arg_entry.get())
    seventh_arg = ("--seventh-arg ",self.seventh_arg_entry.get())
    eighth_arg = ("--eighth-arg ",self.eighth_arg_entry.get())
    ninth_arg = ("--ninth-arg ",self.ninth_arg_entry.get())
    tenth_arg = ("--tenth-arg ",self.tenth_arg_entry.get())
    eleventh_arg = ("--eleventh-arg ",self.eleventh_arg_entry.get())
    twelfth_arg = ("--twelfth-arg ",self.twelfth_arg_entry.get())
    thirteenth_arg = (self.vold.get())
    print ("Tool started in terminal")
    self.bt_stop.config(state=norMAL)
    self.disable_buttons()
    global obj
    if self.vold.get() == "":   
        obj = subprocess.Popen([self.Tipvar.get(),twelfth_arg))])
    else:
        obj = subprocess.Popen([self.Tipvar.get(),'myool.py',twelfth_arg,thirteenth_arg))])

我在做什么错?在 Linux / Windows 上可以做什么工作?

希望你能帮助我。

解决方法

您正在子进程调用中发送元组(圆括号中的参数),我认为这是造成问题的原因。

请。请查看子流程文档以了解更多详细信息,如何传递args,如果不确定数据类型,请使用type()运算符