【问题标题】:Getting the output of os.system in python and processing it after [duplicate]在python中获取os.system的输出并在[重复]之后处理它
【发布时间】:2014-12-20 19:24:15
【问题描述】:

我正在尝试做类似的事情:

f = subprocess.check_output("./script.sh ls -l test1/test2/test.log", shell=True)

当我打印 f 时,我得到值 0。我尝试使用 subprocess 然后 read() ,即使这样我也没有得到文件的详细信息。我需要验证文件的大小..

不确定如何实现。

有什么帮助吗?

当我使用时

f = os.system("./script.sh ls -l test1/test2/test.log"),我得到了输出,但没有保存在 f 中。像 stdoutput 之类的东西..

更新: 我用过

f = os.popen("./script.sh ls -l test1/test2/test.log 2>&1")

如果我直接在 CLI 上直接在 CLI 上运行相同的命令,但如果我在脚本中使用上述命令或使用 s = f.readline(),脚本将停止,我需要在脚本之前点击“return”可以继续了。。

这是为什么呢?我需要 's' 因为我需要处理它。

【问题讨论】:

  • 请显示实际代码。 os.system 行显然不是你运行的,因为它是一个 SyntaxError,即使不是,你几乎肯定会从 script.sh 得到某种错误,因为它找不到名为 @987654328 的文件@。并且“我尝试使用子进程然后 read()”意味着您几乎肯定错过了一些我们可以向您解释的东西,如果我们看到您尝试过的内容,但没有看到任何东西就无法解释。
  • 使用 OS 模块中的方法检查文件大小的原因是什么?
  • os.system 或多或少已被弃用,您应该改用更强大的subprocess module
  • @inspectorG4dget:这个问题是关于获取在当前脚本/模块中定义或导入的函数调用的输出,而不是获取外部程序的输出。我敢肯定这是一堆问题,但我认为这不是正确的。
  • @abarnert:按照措辞,这个问题可能并不完全相同。但解决方案确实超越了这个问题。这就是为什么我投票支持关闭

标签: python process grep operating-system system


【解决方案1】:

你可以使用subprocess.check_output:

f = subprocess.check_output("./script.sh ls -l test1/test2/test.log",shell=True)
print(f)

您可以在不使用 shell=True 的情况下拆分成一个单独的参数列表:

f = subprocess.check_output(['./script.sh', 'ls', '-l', 'test1/test2/test.log']))

【讨论】:

  • 在 Unix 上不要使用没有shell=True 的命令行;您将收到一条错误消息,提示当前目录中没有任何名为 "script.sh ls -l test1/test2/test.log" 的内容。
  • @abarnert,我忘了shell=True,我知道它是如何工作的
  • @abarnett - 如果你的参数是一个序列(通常是一个列表),你不需要 shell=True
  • @abarnert 已添加
  • 我按照 Padraic Cunningham 所说的做了,但程序卡在 f = subprocess.check_outout(....) 行,而且似乎永远卡在那里!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 2022-10-14
  • 2017-06-23
  • 2021-08-30
  • 2011-10-31
  • 1970-01-01
相关资源
最近更新 更多