python - 长串命令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.
有没有人有任何想法?
解决方案
在你的代码中你有-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)