【问题标题】:running bash command from python3从 python3 运行 bash 命令
【发布时间】:2016-06-16 17:19:00
【问题描述】:

我正在尝试删除一些文件(从我的 linux 机器上),除了少数:

touch INCAR KPOINTS foo bar
$ls
bar  foo  INCAR  KPOINTS
$python3 mini.py
Job Done
$ls
bar  foo  INCAR  KPOINTS 

mini.py 是:

#!/usr/bin/python3
import subprocess

subprocess.run(['rm', '-f', '!(INCAR|KPOINTS|PO*|*.sh)'])
print("Job Done")

mini.py 的输出中可以看出,它没有给出任何错误,但也没有完成它的工作。

我在这里做错了什么?

【问题讨论】:

  • rm 不是可执行文件,它只是 bash 的内部命令。试试run['bash', '-c', " rm ..."]
  • 那也不行
  • rm 是任何健全系统中的可执行文件。它是 GNU Coreutils 软件包的一部分,您可以在 /bin//usr/bin 中找到它,具体取决于您的发行版。
  • 对不起,我错了。但是你为什么不使用os.remove()rm 似乎运行但无法删除其中一些文件。
  • 我可以使用os.remove 选择不删除哪些文件吗?我的意思是!(...) 部分?

标签: python bash


【解决方案1】:

它不起作用,因为!() 是扩展匹配模式,需要显式启用:

subprocess.run(['/bin/bash', '-O', 'extglob', '-c', 'rm -f !(INCAR|KPOINTS|PO*|*.sh)'])

请注意,这将删除脚本本身...

【讨论】:

    【解决方案2】:

    你也可以使用

    import os
    os.system('rm -f !(INCAR|KPOINTS|PO*|*.sh)')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      相关资源
      最近更新 更多