【问题标题】:Concatenate all files except one calling system - Python连接除一个调用系统之外的所有文件 - Python
【发布时间】:2015-11-13 05:10:16
【问题描述】:

要连接一个文件夹的所有TXT文件,可以用cat轻松完成:

cat ./tmp*.txt >./tmp/all.txt

但是,我想连接所有文件,但可以使用以下命令完成的文件除外,类似here

cat ./tmp/!(1.txt) >./tmp/all_except_1.txt

这些命令在命令行上完美运行,但我尝试使用os.system 命令从 python 调用它们并给出错误

>>> import os
>>> os.system('cat ./tmp/!(1.txt) >./tmp/all_except_1.txt')
sh: 1: Syntax error: "(" unexpected

有人知道为什么以及如何解决吗?

【问题讨论】:

  • os.system 运行 Bourne 或 POSIX shell:sh。您正在尝试的是 bash 特定的。您必须在命令前加上 bash -c (未经测试)。你在哪里做你的shopt

标签: python bash unix system


【解决方案1】:

在调用它之前,你需要在 bash 中启用扩展模式匹配:

os.system("bash -O extglob -c 'cat ./tmp/!(1.txt) >./tmp/all_except_1.txt'")

【讨论】:

  • 我在一篇文章中读到该问题可能与 bash 有关,但我不知道该选项。谢谢,效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-07
  • 2018-10-09
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 2012-09-14
相关资源
最近更新 更多