【问题标题】:Cannot perform subprocess.run inside a snap无法在快照内执行 subprocess.run
【发布时间】:2020-09-21 02:29:12
【问题描述】:

在我的 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】:

您以错误的方式呼叫subprocess.run。您应该将命令作为单个字符串传递给它(就像您在此处所做的那样),然后设置 shell=True,或者将命令分解为多个参数,如下所示:

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

请参阅documentation 的常见问题解答部分:

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

【讨论】:

  • 好的,谢谢,但是当我使用您告诉我的命令时,我遇到了另一个问题:cannot open /run/snapd/ns/snap.netmgr.info: Permission denied 但是当我找到文件并检查权限时,它表明我有权限
  • 嗯。可能与sudo有关。您能否在 sudo 下运行整个脚本(例如 sudo python3 ...),看看会发生什么?也 - 做同样的事情,但从命令中删除“sudo”。
  • 当我直接运行我的程序时,它可以工作(即使在 python3 之前没有“sudo”)。当我尝试从命令中删除 sudo 时,它会显示internal error, please report: running "netmgr" failed: open /snap/netmgr/x1/meta/snap.yaml: permission denied
  • 所以我不明白。在您的第一条评论中,您写道您收到“无法打开...”错误。但是现在,您是说当您运行程序时它可以工作?不确定我是否关注。
  • 当我使用“sudo python3 setup.py”运行我的程序时,它确实运行良好。但我想捕捉我的程序以在 Ubuntu Core 中使用它。所以我把它拍下来并用“sudo snap install iotr-configuration.snap”安装它。然后当我使用命令“iotr-configuration”启动我的程序时,该命令不起作用......事实上,每个带有 sudo 的命令在我的 snap 中都不起作用
猜你喜欢
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 2017-03-15
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多