【发布时间】:2021-03-29 16:41:56
【问题描述】:
以下命令在 shell 中按预期运行:
git log --since=yesterday.midnight --before=today.midnight --format= --name-status
当翻译成下面的python代码但是它失败了:
git = subprocess.Popen(['git', 'log', '--since=yesterday.midnight', '--before=today.midnight', '--format= --name-status'], stdout=subprocess.PIPE)
错误:
fatal: invalid --pretty format: --name-status
我能找到的最接近的答案是关于解决 Windows 上的问题(我在 Mac 上):How to use subprocess when multiple arguments contain spaces?
根据上面的答案,我尝试了以下引用变体,但都没有奏效:
git = subprocess.Popen(['git', 'log', '--since=yesterday.midnight', '--before=today.midnight', '"--format= --name-status"'], stdout=subprocess.PIPE)
fatal: ambiguous argument '"--format= --name-status"': unknown revision or path not in the working tree.
git = subprocess.Popen(['git', 'log', '--since=yesterday.midnight', '--before=today.midnight', '--format=" --name-status"'], stdout=subprocess.PIPE)
fatal: invalid --pretty format: " --name-status"
git = subprocess.Popen(['git', 'log', '--since=yesterday.midnight', '--before=today.midnight', '--format= "--name-status"'], stdout=subprocess.PIPE)
fatal: invalid --pretty format: "--name-status"
在与上述相同的位置使用 "" 而不是 "" 会导致与上述完全相同的错误。
我的基本需求是生成昨天添加和修改的所有文件的列表。
几天前我刚刚学习了 subprocess 语法,因此可能还有更好的方法来解决这个问题。我的脚本运行该命令,然后调用git.stdout.read().splitlines() 生成一个列表,用于后续操作和结果分区。
感谢任何帮助,谢谢。
【问题讨论】: