无法在snap内执行subprocess.run。

问题描述 投票:0回答:1

在我的snap中(用python编码),我尝试执行一些sudo命令,但没有成功。下面是一个没有工作的命令的例子。

command = "sudo netmgr -i country_code set:" + countryCode
subprocess.run([command])

当我在我的设备上运行snap时,它不能工作,我得到了这个错误。

> Traceback (most recent call last): File
> “/snap/iotr-configuration/x17/bin/iotr-configuration”, line 11, in 
> load_entry_point(‘iotr-configure==0.0.3’, ‘console_scripts’,
> ‘iotr-configuration’)() File
> “/snap/iotr-configuration/x17/lib/python3.5/site-packages/src/app.py”,
> line 53, in main configuration_program() File
> “/snap/iotr-configuration/x17/lib/python3.5/site-packages/src/app.py”,
> line 37, in configuration_program
> confNIC.set_nic_settings(“fd05:a40b:b47d:7340::4”, “1250”) File
> “/snap/iotr-configuration/x17/lib/python3.5/site-packages/src/configureNic.py”,
> line 16, in set_nic_settings subprocess.run([command]) File
> “/snap/iotr-configuration/x17/usr/lib/python3.5/subprocess.py”, line
> 693, in run with Popen(*popenargs, **kwargs) as process: File
> “/snap/iotr-configuration/x17/usr/lib/python3.5/subprocess.py”, line
> 947, in init restore_signals, start_new_session) File
> “/snap/iotr-configuration/x17/usr/lib/python3.5/subprocess.py”, line
> 1551, in _execute_child raise child_exception_type(errno_num, err_msg)
> FileNotFoundError: [Errno 2] No such file or directory: ‘sudo netmgr
> -i country_code set:1250’

这个功能是存在的,因为当我在终端上直接输入它时,它就会工作... ...

你能帮我解决这个问题吗?

python subprocess snapcraft
1个回答
0
投票

你正在调用 subprocess.run 的方式不对。你应该把它作为一个单独的字符串传递给命令(就像你在这里做的那样),但是你应该把它设置为 shell=True,或将命令分解为多个参数,如。

command = ["sudo", "netmgr", "-i", "country_code", "set:" + countryside]
subprocess.run(command)

参见FAQ部分 文件:

args是所有调用都需要的,它应该是一个字符串,或者一个程序参数序列。一般来说,提供一个参数序列是比较好的选择,因为它允许模块对参数进行必要的转义和引号处理(例如,允许文件名中的空格)。如果只传递一个字符串,则 shell 必须为 True (见下文),否则字符串必须简单地命名要执行的程序而不指定任何参数。

© www.soinside.com 2019 - 2024. All rights reserved.