试图访问正确的目录

时间:2012-04-11 12:29:23

标签: python command-line printing

所以我正在尝试编写一个在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等等

如何让它转到正确的目录,每个计算机可能(尽管可能不会)不同?

2 个答案:

答案 0 :(得分:2)

您需要在路径上使用os.path.expandvars来替换“%windir%”。

另外,除了这个问题之外,最好将一个参数列表,而不是一个长字符串传递给subprocess.call,即

subprocess.call(['rundll32', 'printui.dll'...])

答案 1 :(得分:1)

您需要使用环境变量来获取windir,%WINDIR%将不会扩展到您期望的值,因此假定它相对于当前工作目录。根据:this link

,您可以使用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,))

并使用三个引号“”“表示多行。你不需要它们用于单行使用'或”

否则,您将使用以下命令更改当前工作目录:

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')