5 unix sorting bash shell command-line
我在使用os.system命令从Python中正确地转义对shell的调用时遇到了麻烦.我正在尝试做相当于:
$ cat test | sort --stable -t $'\t' -k1,1
Run Code Online (Sandbox Code Playgroud)
从Python中传递给shell.
我试过了:
import os
cmd = "cat %s | sort --stable -t $'\\t' -k1,1" %("test")
os.system(cmd)
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
sort: multi-character tab `$\\t'
Run Code Online (Sandbox Code Playgroud)
虽然它可以从shell中正常工作.我试图\t通过在Python中添加额外的斜杠来逃避,但我必须遗漏其他东西.知道如何解决这个问题吗?
谢谢.
os.system不像你期望的那样在正常的bash环境中执行命令.你可以自己简单地调用bash来解决它:
import os
cmd = """/bin/bash -c "cat %s | sort --stable -t $'\t' -k1,1" """ % "test"
os.system(cmd)
Run Code Online (Sandbox Code Playgroud)
但是你应该知道os.system已被标记为已弃用,并将在未来的python版本中删除.您可以使用模仿行为subprocess的方便方法call来验证您的代码os.system:
import subprocess
cmd = """/bin/bash -c "cat %s | sort --stable -t $'\t' -k1,1" """ % "test"
subprocess.call(cmd, shell=True)
Run Code Online (Sandbox Code Playgroud)
如果您感兴趣,有更多方法可以使用子进程模块进行调用:
http://docs.python.org/library/subprocess.html#module-subprocess