Execute command on linux terminal using subprocess in python
我想使用python脚本在Linux终端上执行以下命令
1 | hg log -r"((last(tag())):(first(last(tag(),2))))" work |
此命令提供"work"目录中受影响文件的最后两个标记之间的变更集。
我试过:
1 2 3 4 | import subprocess releaseNotesFile = 'diff.txt' with open(releaseNotesFile, 'w') as f: f.write(subprocess.call(['hg', 'log', '-r', '"((last(tag())):(first(last(tag(),2))))"', 'work'])) |
错误:
1 2 3 4 5 | abort: unknown revision '((last(tag())):(first(last(tag(),2))))'! Traceback (most recent call last): File"test.py", line 4, in <module> f.write(subprocess.call(['hg', 'log', '-r', '"((last(tag())):(first(last(tag(),2))))"', 'work'])) TypeError: expected a character buffer object |
使用os.popen()。
1 2 3 | with open(releaseNotesFile, 'w') as file: f = os.popen('hg log -r"((last(tag())):(first(last(tag(),2))))" work') file.write(f.read()) |
如何使用子进程执行该命令?
要解决您的问题,请将
1 | f.write(subprocess.call(['hg', 'log', '-r', '((last(tag())):(first(last(tag(),2))))', 'dcpp'])) |
解释
当从命令行(如bash)调用程序时,将"忽略"
1 2 | hg log -r something hg"log""-r""something" |
在您的特定情况下,shell中的原始版本必须用双引号括起来,因为它有圆括号,而那些圆括号在bash中有特殊的含义。在Python中,这是不必要的,因为您使用单引号将它们括起来。