【问题标题】:How to use subprocess.Popen when an argument has spaces?当参数有空格时如何使用 subprocess.Popen?
【发布时间】: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() 生成一个列表,用于后续操作和结果分区。

感谢任何帮助,谢谢。

【问题讨论】:

    标签: python git shell


    【解决方案1】:

    你只是少了一个逗号。

    git = subprocess.Popen(
        [
            "git",
            "log",
            "--since=yesterday.midnight",
            "--before=today.midnight",
            "--format=",  # <-- this one!
            "--name-status",
        ],
        stdout=subprocess.PIPE,
    )
    

    【讨论】:

    • 谢谢。不幸的是,即使逐字逐句,当脚本运行时我仍然会得到fatal: invalid --pretty format: --name-status。 :(
    猜你喜欢
    • 2011-03-30
    • 2015-11-18
    • 2010-10-22
    • 1970-01-01
    • 2011-10-13
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多