【问题标题】:Subprocess issue on the linuxlinux上的子进程问题
【发布时间】:2016-12-08 10:45:30
【问题描述】:

我刚刚在 python 中创建了一个脚本。它在本地 Windows 操作系统上运行良好。但是,当我将脚本部署到 Linux 服务器时。它给出了以下错误;有什么想法可以在linux上解决这个问题吗?

Typerror: execv arg 2 must contain only strings

    def export(ip, channel_search_list):


    if len(ip) > 0: 

            filename = "files//"+"output"+str(ip)+".txt"
            action = 'FullExport'
            menu_action = 'all'
            arg_list = [('upnp//Client//UPNP_Client_Cmd_Line.py')]

            arg_list.append(' --action=')
            arg_list.append(action)
            arg_list.append(' --ip=')
            arg_list.append(ip)
            arg_list.append(' --menu=')
            arg_list.append(menu_action)

            x = subprocess.Popen(arg_list, shell=True)

            print arg_list

            with open(filename, "w+") as output:
                subprocess.call(["python", arg_list], stdout=output)

    get_book_ids_func(filename, channel_search_list, ip)


File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "index.py", line 202, in export
    subprocess.call(['python', arg_list], stdout=output)
  File "/usr/lib/python2.7/subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
TypeError: execv() arg 2 must contain only strings
PID is:4439

【问题讨论】:

  • arg_list.append(str(ip)) ?
  • 嗨@MauriceMeyer 感谢您的回答。我之前尝试过,不幸的是这并没有解决问题。
  • arg_list = [('upnp//Client//UPNP_Client_Cmd_Line.py')] 包含一个元组而不是一个字符串

标签: python linux subprocess


【解决方案1】:
               subprocess.call(["python", arg_list], stdout=output)

这里我们得到了一个字符串列表和一个列表,而不是字符串列表。 为了将'str'"python"添加到'list'arg_list,我们可以这样写:

                subprocess.call(["python"]+arg_list, stdout=output)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多