0

Windows でコマンド ラインを使用するスクリプトを作成しようとしていますが、デフォルトで Python ディレクトリの下にある構造になっています。これは望ましくありません。

import subprocess
import time
subprocess.call(r"""Cscript %windir%/System32/Printing_Admin_Scripts/en-US/Prnport.vbs -a -r "saturn.print.mediag.com" -h "saturn.print.mediag.com" -o raw""")
time.sleep(5)
subprocess.call(r"""rundll32 printui.dll, PrintUIEntry /if /b "Saturn" /f w:\printers\toshibae3511\eng\est_c2.inf /r "saturn.print.mediag.com" /m "TOSHIBA e-STUDIO Color PS3""")
raw_input("press any key to exit")

最初のサブプロセス呼び出しは、c:\windows\system32 などでスクリプト prnport.vbs を実行する必要がありますが、代わりに c:\python27\projects\printer setup\%windir%\system32 などのようになります。

コンピューターごとに異なる可能性があります (おそらくそうではないでしょう) 正しいディレクトリに移動するにはどうすればよいですか?

4

2 に答える 2

2

os.path.expandvars「%windir%」を置き換えるには、パスで使用する必要があります。

また、質問は別として、単一の長い文字列ではなく、引数のリストを渡す方が良いですsubprocess.call

subprocess.call(['rundll32', 'printui.dll'...])
于 2012-04-11T12:42:56.267 に答える
1

Windir を取得するには、環境変数を使用する必要があります。 %WINDIR% は、期待する値に展開されないため、現在の作業ディレクトリに対して相対的であると見なされます。このリンクに従って、os.environ["WINDIR"]またはを使用できます。os.getenv("WINDIR", "default_value")

それがそれであるかどうかはわかりません。私はWindowsを使用していませんが、同様のものが必要です:

import os
windir = os.environ["WINDIR"]
subprocess.call(r'Cscript %s/System32/Printing_Admin_Scripts/en-US/Prnport.vbs -a -r "saturn.print.mediag.com" -h "saturn.print.mediag.com" -o raw' % (windir,))

また、複数の行には三重引用符 """ を使用します。1 行の場合は、' または " を使用する必要はありません。

それ以外の場合は、現在の作業ディレクトリを次のように変更します。

import os
os.chdir('C:\\Windows\\Sytem32\\')
subprocess.call(r'Cscript ./System32/Printing_Admin_Scripts/en-US/Prnport.vbs -a -r "saturn.print.mediag.com" -h "saturn.print.mediag.com" -o raw')
于 2012-04-11T12:42:06.663 に答える