【问题标题】:How to return args of a subprocess.Popen如何返回 subprocess.Popen 的参数
【发布时间】:2018-02-15 18:02:49
【问题描述】:

我正在运行一个 bash 脚本,该脚本由 python 中的许多其他命令组成

mybash.sh:

#!/bin/bash
var=10
echo variable is equal to $var

在 python 中运行.sh

if echo variable is equal to $var == echo variable is equal to 10:
print ('variable is 10')

我尝试这样做:

process = Popen('sh mybash.sh', shell=True, stdout=PIPE, stdin=PIPE)

我试图在 bash 脚本中获取每个命令的 args 值,但 process.args 只返回 sh mybash.sh。如何在执行时逐行返回脚本内每个命令的 args 值?

【问题讨论】:

  • args 是什么意思?参数是您放入函数/脚本的内容。如果你想取出一些东西,你必须 echo .sh 脚本中的每个参数并阅读标准输出。
  • 是否有必要将此 bash 脚本包装在 python 脚本中?你可以只使用其中一个然后调试它。
  • 这里不需要shell=TruePopen(['sh', 'mybash.sh'], ...)
  • mybash.sh 实际上是一个黑盒子;除了自己解析文件之外,您无法获得有关其中发生的任何信息。
  • 实际上,我想在运行时过滤 bash 脚本中的一些命令。所以,这就是为什么我首先在​​ python 中运行 bash 脚本来控制这些命令!

标签: python bash subprocess popen


【解决方案1】:

您没有在 python 中运行 bash 脚本。您正在运行运行 mybash.sh 脚本的 bash 解释器 (sh)。您无法从 python 访问单个 bash 命令,但可以使用 -x 标志。

process = Popen('sh -x mybash.sh', shell=True, stdout=PIPE, stdin=PIPE)

【讨论】:

  • 因为shell=True,这实际上运行sh -c 'sh -x mybash.sh'
  • 实际上,目标是过滤mynahs.sh 运行时中的命令,而不仅仅是运行bash!有什么命令,让我逐行访问bash脚本运行时的那些命令?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多