4

ビルド番号を実行可能ファイルにスタンプするために、Python スクリプト内から使用しているコマンド ライン プログラムがあります。

これはコマンド ライン プログラムです: http://www.elphin.com/downloads/stampver/

私の問題は、プログラムが引数の 1 つに二重引用符 (") を取り、このプログラムを呼び出すために使用している Python サブプロセス モジュールが、プログラムの実行時に二重引用符の前にバックスラッシュを追加し続けることです。これにより、プログラムが失敗する原因となります。間違った構文に。

次のようなコマンドが必要です。StampVer.exe -nopad -k -f"0.1.4491.0" <ExeFile>.exe

そして代わりに Python が実行されています:StampVer.exe -nopad -k -f\"0.1.4491.0\" <ExeFile>.exe

文字列を未加工としてマークしたり、Python で引用符の前にバックスラッシュを追加したりするなど、同様の音の問題について StackOverflow で見つけたいくつかのことを試しました。Python はバックスラッシュと二重引用符をエスケープしようとするため、コマンド ラインでバックスラッシュが 1 つではなく 3 つになるだけです。

これを達成するために subprocess モジュール以外のものを使用する必要がありますか、それとも Python のこれらすべてのタイプのモジュールは、文字をエスケープするための同じ規則に従いますか? サブプロセスにエスケープ文字を削除するか、まったく追加しないように指示するためにできることはありますか?

編集

これは、Python からサブプロセスを呼び出す方法です。

def set_file_version(version_number, filepath):

    try:
        file_version_arg = '-f"{0}"'.format(version_number)
        cmd_line = ["StampVer.exe", "-nopad", "-k", file_version_arg, filepath]
        subprocess.check_output(cmd_line)

    except subprocess.CalledProcessError as e:
        if e.returncode == 1:
            pass
        else:
            raise e

次に、StampVer はこれを返します。

error: Invalid -f parameter. Try -f"0.0.0.0" Use StampVer -? for help

4

2 に答える 2

0

私の解決策は、一種の警官でした。すべての例で上記のバージョン番号の形式を示している StampVer のドキュメントにもかかわらず、引用符をすべて一緒に省略したり、-f スイッチからスペースを空けたりすることができ、それでも受け入れられることがわかりました。

これを私の答えと呼びますが、サブプロセスを介して引用符を渡すことができることは、理解する価値のある問題だと思います。誰かが最初の問題を実際に解決する答えを持っている場合は、投稿してください。代わりにマークします。

于 2013-04-26T14:29:15.187 に答える
0

このスクリプトsub.pyを試してください:

#! /usr/bin/python

import sys
from subprocess import check_output

if len(sys.argv) > 1:
    print sys.argv
else:
    print check_output((sys.argv[0], '-f"1234"'))

それを実行します:

./sub.py

私たちが与えたものを返します:

['./sub.py', '-f"1234"']

したがって、check_output は問題なく動作すると思います。問題は、StampVer.exe がパラメーターを処理する方法にある可能性があります。試してみてください。

file_version_arg = '-f{0}'.format(version_number)
于 2013-04-25T22:14:31.157 に答える