【问题标题】:How to parse a variables to subprocess.run in python如何在python中将变量解析为subprocess.run
【发布时间】:2020-05-13 10:43:50
【问题描述】:

我是 python 新手。我有 install.py。以下是存储其值的变量。执行/运行 abc.py 时,无法将文件从远程服务器复制到本地服务器。当相同的东西是子进程命令中的硬编码值时,能够传输文件,但在子进程中传递变量不起作用。参考了其他文章,但没有运气。

srcuser=abcd srcip=x.x.x.x srcpath=/home/sum/mnt/ sshprkey=/home/xyz/id_rsa
subprocess.run(['sudo', 'scp', '-P22', '-i sshprkey', 'srcuser@srcip:srcpath/"mongodb-org-3.6.repo"', '/etc/yum.repos.d/'])

谢谢

【问题讨论】:

  • 它是一个shell内置命令。你需要告诉 subprocess 它是一个 shell 命令。看我的回答。

标签: python subprocess


【解决方案1】:

试试这个,我们将 shell 关键字参数分配给 true。

subprocess.run(['sudo', 'scp', '-P22', '-i sshprkey', 'srcuser@srcip:srcpath/"mongodb-org-3.6.repo"', '/etc/yum.repos.d/'], shell=True)

使用 Popen(从 python 文档复制) 在 shell=True 的 Unix 上,shell 默认为 /bin/sh。如果 args 是字符串,则该字符串指定要通过 shell 执行的命令。这意味着字符串的格式必须与在 shell 提示符下键入时的格式完全相同。这包括,例如,引用或反斜杠转义文件名,其中包含空格。如果 args 是一个序列,则第一项指定命令字符串,任何附加项将被视为 shell 本身的附加参数。

您需要确保第一项指定命令字符串

Popen(['sudo scp', '-P22', '-i sshprkey', 'srcuser@srcip:srcpath/"mongodb-org-3.6.repo"', '/etc/yum.repos.d/'],shell=True)

【讨论】:

  • 它显示 scp 使用语法并且无法复制文件。 subprocess.Popen(['scp', '-P22', '-i sshprkey', 'srcuser@srcip:srcpath/srcfilename', '/etc/yum.repos.d/'],shell=True)。还按照上述语句尝试使用 sudo,显示相同的 scp 使用语法
  • 亲爱的先生 (@Ganesh) - 我给你写了足够多有用的数据(引用 py 文档)。请做剩下的。转到此处的 py 文档subprocess 并阅读 subprocess 模块。这对你更好。!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-29
  • 2015-08-10
  • 2020-06-16
  • 2015-02-06
  • 2021-03-15
  • 1970-01-01
相关资源
最近更新 更多