【问题标题】:Python3 subprocess call not working [duplicate]Python3子进程调用不起作用[重复]
【发布时间】:2017-09-20 13:45:03
【问题描述】:

Python3 子进程调用不起作用

import subprocess 
subprocess.call("sudo nautilus")

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    试试这个:

    subprocess.call(["sudo", "nautilus"])
    

    【讨论】:

    • +1 表示仅建议最佳实践方法,grumph 表示忽略来自How to Answer 的“回答好问题”,并指出已经提出的问题和以前回答过很多次了,应该不会再回答了。
    【解决方案2】:

    您必须使用 shell = true 才能使其在 shell 中工作

     import subprocess 
     subprocess.call("sudo nautilus", shell=True)
    

    或者你可以将它作为一个列表输出

     subprocess.call(["sudo", "nautilus"])
    

    【讨论】:

    • shell=True 使您的代码 subprocess.call(["sh", "-c", "sudo nautilus"]) -- shell=True(在 UNIX 上)字面上将参数附加到硬编码列表 ['sh', '-c'],添加了一个额外的间接层,这意味着所有的低效率. (由于间接层将字符串解析为代码,因此如果将值替换到正在调用的命令行中,它也会产生安全影响。
    【解决方案3】:

    尝试设置shell=True,所以:

    subprocess.call("sudo nautilus",shell=True)
    

    【讨论】:

    • 请下次发回溯源。
    • shell=True 使您的代码 subprocess.call(["sh", "-c", "sudo nautilus"]) -- shell=True(在 UNIX 上)将参数附加到硬编码列表 ['sh', '-c'],添加了一个额外的间接层,所有的低效率都意味着. (由于间接层将字符串解析为代码,因此如果将值替换到正在调用的命令行中,它也会产生安全影响。
    猜你喜欢
    • 1970-01-01
    • 2014-10-14
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多