-2

WindowsでPythonを使用して、ファイルを移動するための「移動」コマンドであるバッチコマンドを実行しようとしています。Pythonでshutilを使用して実行できることは承知していますが、問題が発生しました。

move /-y "%~dp0itself.py" "C:\folder\folder2\"

バッチファイルとして単独で実行すると、完全に機能します。

import subprocess
    process = subprocess.Popen(move /-y "%~dp0sarpedon.py" "C:\Utility\Config\", shell=True, stdout=subprocess.PIPE)
process.wait()
print process.returncode

Pythonの他のコードの最後にそれを追加しようとしましたが、エラーが発生し続けます。

"%~dp0sarpedon.py   (")

私がそれを修正するために使用する多くの試みは、エラーで終わります:

EOL while scanning string literal.

閉じ括弧

(move /-y "%~dp0sarpedon.py" "C:\Utility\Config\", shell=True, stdout=subprocess.PIPE   ")"

どうすればこれを修正できますか?

4

2 に答える 2

1

Popen の仕組みに関するドキュメントを読む必要があります。かっこの間にコマンドラインをダンプすることはできません。コマンドとその引数をリスト内の文字列として渡す必要があります。ドキュメントを読んでください。

于 2012-07-06T18:52:21.893 に答える
0

shutil が与えた問題を特定できますか? 二重のバックスラッシュを忘れましたか? または、ファイルまたはディレクトリに管理者権限が必要ですか?

次のエラーが発生しましたか?

import shutil
shutil.move("%~dp0itself.py", "C:\\folder\\folder2")

私の 64 ビット Windows マシンで実行すると、この行でファイルが移動されました。

コードが機能しない理由については、\" が原因だと思います。2 つのバックスラッシュ \ を使用してみてください。そうしないと、文字列インタープリターが文字列を終了しません。または、すべての代わりに奇妙な文字が作成されます。セパレーター。

サブプロセスの使用に専念している場合は、移動コマンドと宛先コマンドの結合文字列で次を試してください。

import subprocess
process = subprocess.Popen("move /-y %~dp0sarpedon.py C:\\Utility\\Config\\",
                           shell=True, stdout=subprocess.PIPE)
于 2012-07-06T19:07:50.583 に答える