【问题标题】:Executing a Linux shellscript执行 Linux shell 脚本
【发布时间】:2023-08-28 00:49:01
【问题描述】:

我正在尝试从 Python 执行一个以 ipaddress 作为参数的 shellscript,

我正在使用以下命令,但出现错误,我需要以 Sudo 用户身份执行此 shellscript..

错误:-

[root@linuxhost web]# python test.py
29575
usage: sudo [-D level] -h | -K | -k | -V

usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user

            name|#uid]



process = subprocess.Popen(['sudo','/usr/local/bin/test.sh','127.0.0.1'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
process.wait()

我尝试通过使用 sudo 直接调用来调用 shellscript,但仍然失败..

process = subprocess.Popen(['sudo /usr/local/bin/test.sh','127.0.0.1'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)

【问题讨论】:

标签: python popen


【解决方案1】:

您不能将列表参数与shell=True 结合使用。使用类似的东西

process = subprocess.Popen('sudo /usr/local/bin/test.sh 127.0.0.1',
    stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)

或者不要使用shell=True

process = subprocess.Popen(['sudo','/usr/local/bin/test.sh','127.0.0.1'],
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)

【讨论】:

  • 你的意思是它们都不是?你遇到了什么问题?
  • 带有列表 args 且没有 shell=True,我收到此错误-----文件“/usr/lib/python2.7/subprocess.py”,第 679 行,在 init errread, errwrite) 文件“/usr/lib/python2.7/subprocess.py”,第 1249 行,在 _execute_child raise child_exception OSError: [Errno 2] No such file or directory
  • 这通常意味着找不到可执行文件。试试/usr/bin/sudo 而不是sudo(如果 sudo 不在你的路径中)。