2012-04-11 4 views
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에 스크립트 prnport.vbs를 실행해야 할 첫 번째 서브 프로세스 호출 : \ WINDOWS \ system32를, 등, 등, 그러나 대신은 C를 좋아하는 간다 : \ python27 \ 프로젝트 \ 프린터 설정 \의의 % windir % \ system32 등

컴퓨터마다 다를 수 있지만 올바른 디렉토리로 이동하려면 어떻게해야합니까?

답변

1

windir을 얻기 위해 환경 변수를 사용해야 할 때 % WINDIR %은 예상 값으로 확장되지 않으므로 현재 작업 디렉토리와 관련되어 있다고 가정합니다. 나는 그게 있다면, 내가 Windows에서 아니에요 모르겠지만, 당신이 비슷한 필요 this link

:

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

을 그리고 삼중 따옴표 ""를 사용하여 당신은에 따라 os.environ["WINDIR"] 또는 os.getenv("WINDIR", "default_value")을 사용할 수 있습니다

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

그렇지 않으면, 당신이 현재 작업 디렉토리를 변경할 것입니다. "여러 줄에 대한 단일 라인 사용하기 위해 필요 '하지 않거나"

"% windir %"를 바꾸려면 경로에서 os.path.expandvars을 사용해야합니다. 즉 subprocess.call

또한, 따로 질문에서, 그것은 인수 목록을 전달하는 것이 좋습니다 아닌 하나의 긴 문자열,

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

@ 앤드류 - 알렉산더 또는 하위 프로세스에 매개 변수'쉘 = TRUE '를 추가 .call은 목록 대신 단일 문자열을 사용하는 것보다 못 생깁니다. :피 – KurzedMetal

관련 문제