首页 > 解决方案 > 长串命令python错误消息的子进程

问题描述

我想编写一个 python 脚本来执行以下行:

ls -1 -d ??? | cut -c 1-2 | sort | uniq | while read NN; do echo $NN; tar -cjf fcllistRPC_${NN}.bz2 ${NN}?; done

我试过了:

def loop(jobname):
  """
  Loop over gen_fcl output and store as tarbull
  """
  loop = ["ls", "-1", "-d", "???", "|", "cut", "-c", "1-2", "|", "sort", "|", "uniq", "|", "while", "read", "NN;", "do", "echo", "$NN;", "tar", "-cjf", "fcllist_"+str(jobname)+".bz2", "${NN}?;", "done"]
  subproc = subprocess.run(loop)
  return subproc

但我看到了这个错误:

ls: invalid option -- 'j'
Try 'ls --help' for more information.

有没有人有任何想法?

标签: python

解决方案


在你的代码中你有-cjf. 每个字母都是命令的“选项”。这导致了错误。如果您将其删除,它将运行

另外,如果您希望它运行一行代码,请运行该行代码。

codeToRun = "ls -1 -d ??? | cut -c 1-2 | sort | uniq | while read NN; do echo $NN; tar -cjf fcllistRPC_${NN}.bz2 ${NN}?; done"
subproc = subprocess.run(codeToRun)

推荐阅读