【问题标题】:Passing Variables to Subprocess.Popen to run copy command将变量传递给 Subprocess.Popen 以运行复制命令
【发布时间】:2020-06-21 04:31:52
【问题描述】:

我有一个脚本,它运行复制命令来复制文件和目录。因为,我将参数存储在变量中。

copy_cmd = ['Lang=en_US' , '/bin/cp' , '-r' , '-v']

Option['source']

Option['destination']

我在运行时传递 Option['source'] & Option['destination'] 的值。 我无法执行命令并获取....

child exception
AttributeError: list object has no attribute rfind

我正在使用的命令是

copy_pid = subprocess.Popen([copy_cmd , Option['source'] , '/.' , 'Option['destination']'] , stdin = subprocess.PIPE , stdout = subprocess.PIPE)

【问题讨论】:

  • 什么是期权?是字典吗?是清单吗?如果你这样做print(type(Option['source'])) 你会得到什么?如果你做了print(Option['source']),你看到了什么?
  • 基本上,您需要确保您传入的所有内容都是正确的。此命令有效:subprocess.Popen(["echo", "hello", "world"]) 因此您需要传入一个列表。此外,如果您需要在 shell 中运行命令,您可以尝试shell=True。请给我们更多信息。

标签: python subprocess popen3


【解决方案1】:

您需要传递字符串列表,但 copy_cmd 已经是一个列表。所以你需要连接它而不是作为元素插入。

copy_pid = subprocess.Popen(copy_cmd + [Option['source'] , '/.' , Option['destination']] , stdin = subprocess.PIPE , stdout = subprocess.PIPE)

另外我不明白那些 Option 是干什么用的,所以我就让它们保持原样。

【讨论】:

  • 这不是真的可以工作吗:copy_cmd = ['Lang=en_US' , '/bin/cp' , '-r' , '-v', Option["source"], Option["destination"]]? ://
  • 在这种情况下是的。但我认为这不是准确的答案,如果问题被简化,那么不准确的答案可能不适用。所以我不会尝试猜测作者的意图,我只是尽力回答所提出的问题。
  • copy_cmd = ['Lang=en_US' , '/bin/cp' , '-r' , '-v', Option["source"], Option["destination"]] 我已经尝试过这种方式,但它给我一个错误。以下是错误:引发子异常 OSError: [Errno 2] No such file or directory 但是,我尝试了这个 copy_cmd = [ '/bin/cp' , '-r' , '-v', Option["source"] , Option["destination"]] 并且效果很好。 Option["source"] 和 Option["destination"]] 以字符串格式包含不同目录的路径。
  • 它没有工作,因为它试图运行文件'Lang=en_US'。为什么还要加'Lang=en_US'
猜你喜欢
  • 2013-12-07
  • 2011-10-13
  • 2019-02-16
  • 2017-12-15
  • 2012-06-24
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
相关资源
最近更新 更多