【问题标题】:Adding paths to arguments in popen在 popen 中添加参数的路径
【发布时间】:2016-10-19 10:29:53
【问题描述】:

我想通过 Python 执行 Linux 命令。这适用于终端:

/usr/bin/myprogram --path "/home/myuser"

我试过了:

path = "/home/myuser"
args = ['/usr/bin/myprogram', '--path ' + path]
proc = subprocess.Popen(args)

还有这个:

path = "/home/myuser"
args = ['/usr/bin/myprogram', '--path "' + path + '"']
proc = subprocess.Popen(args)

myprogram 不接受路径格式。我知道当不作为 shell 执行时路径的行为不同,但我无法让它工作。我也尝试过单引号而不是双引号。一个同样适用于 Windows 的解决方案的奖励积分(显然,具有不同的程序路径)。

编辑:对不起,这是从内存中写出来的,并且使用了反斜杠而不是正斜杠。实际代码确实使用了(正确的)正斜杠。

【问题讨论】:

  • 你试过args = ['\usr\bin\myprogram', '--path', path]吗?我以前成功地使用过这种结构,尽管是在 Windows 上。编辑 - 您可能还需要使用 `\` 转义反斜杠
  • 试试subprocess.Popen('/usr/bin/myprogram --path "/home/myuser"', shell=True, stdout=subprocess.PIPE).stdout.read()
  • 你为什么不直接使用['/usr/bin/myprogram', '--path' , path]
  • @ason​​gtoruin 如果我使用正斜杠,您的解决方案可以在 Linux 上运行!如果幸运的话,它也可以在 Windows 上运行而不会转义反斜杠。
  • @tsorn,只需在 linux 和 windows 上使用正斜杠。你不应该在 liunux 上使用反斜杠。

标签: python linux python-2.7


【解决方案1】:

这里有一些尝试:

import subprocess
import shlex

p = subprocess.Popen(shlex.split("/usr/bin/myprogram --path /home/myuser")

注意正斜杠(“/”)。根据我的阅读,即使在 Windows 上运行,Python 也不喜欢反斜杠(“\”)(我自己从未在 Windows 上使用过)。

【讨论】:

    【解决方案2】:

    问题来自您的字符串文字'\usr\bin\myprogram'。根据escaping rules\b\x08替换,所以找不到你的可执行文件。

    在您的字符串文字前加上一个r(即r'\usr\bin\myprogram'),或使用\\ 表示反斜杠(即'\\usr\\bin\\myprogram')。

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 2020-01-14
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      相关资源
      最近更新 更多