파이썬에서 프로그램을 실행하려면 어떻게 해야 하나요? 경로의 공백으로 인해 os.system이 실패함

외부 프로그램을 실행해야 하는 파이썬 스크립트가 있는데, 어떤 이유에서인지 실패합니다.

다음 스크립트가 있는 경우:

import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();

그런 다음 다음 오류와 함께 실패합니다.

'C:\Temp\a'는 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다.

따옴표로 프로그램을 이스케이프하면:

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();

그러면 된다. 그러나 매개 변수를 추가하면 다시 작동이 중지됩니다.

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();

프로그램을 실행하고 완료될 때까지 기다리는 올바른 방법은 무엇입니까? 작업을 하고 그냥 종료되는 비주얼 프로그램이기 때문에 출력물을 읽을 필요가 없지만 완료되기를 기다려야 합니다.

또한 프로그램을 공백이 없는 경로로 이동하는 것도 옵션이 아닙니다.


이 경우에도 작동하지 않습니다.

import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();

스왑된 작은따옴표/큰따옴표를 기록해 두십시오.

메모장에 대한 매개 변수를 사용하거나 사용하지 않으면 오류 메시지와 함께 실패합니다.

파일 이름, 디렉토리 이름 또는 볼륨 레이블 구문이 잘못되었습니다.

질문에 대한 의견 (2)
해결책

'subprocess.call'은 다양한 포탄의 인용 규칙을 처리해야 하는 문제를 피할 수 있을 것이다. 문자열 대신 목록을 허용하므로 인수가 더 쉽게 구분됩니다.

import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])
해설 (9)

여기에서는 다른 방법이 있다.

윈도우를 사용하는 경우, 탐색기에서 파일을 두 번 클릭하거나 DOS "start" 명령에 파일 이름을 인수로 지정하는 것과 같이 동작한다.

filepath = 'textfile.txt'
import os
os.startfile(filepath)

예:

import os
os.startfile('textfile.txt')

텍스트 파일이 열립니다.메모장이 .txt 파일과 연결된 경우 메모장이 있는 txt를 선택합니다.

해설 (3)

39 는 파이썬 자체에 가장 바깥쪽 따옴표를 사용하는 윈도우 셸 doesn&, 그것을 볼 수 없다. 위에서 설명한 것처럼 windo 큰따옴표 이해하고 있을 뿐.

수 백 슬래시 이미 전달하십시오. 변환하시겠습니까 파이썬 는 windows 에서 사용할 수 있도록

os.system('"C://Temp/a b c/Notepad.exe"')

이 & # 39. b 는 통과, 파이썬, 그 다음에 사용하는 &quot C://Temp/a c/Notepad.exe&quot. (Windows 경로를 따라 필요한 백 슬래시 연산뿐 없음) 을 cmd. exe

해설 (5)

윈도 3.1 에서 Windows 7 및 Windows 에서 하는 '최소한' 오스트시스템 명령줄이 , 협업공간이 이중 인용 공백이 경로를 함장님이요 예를 들면 다음과 같습니다.

  TheCommand = '\"\"C:\\Temp\\a b c\\Notepad.exe\"\"'
  os.system(TheCommand)

A 는 나를 정반대 지역에서 있었던 실제 예를 클론한 드라이브에 버추얼박스. 이 때문에 일부 t # 39 위에 ',' 서브프록스스콜 솔루션이므로 didn& 작동합니까 액세스 권한을 문제이지만, '명령' 행복한 때 내가 이중 인용 오스트시스템 되었다.

  TheCommand = '\"\"C:\\Program Files\\Sun\\VirtualBox\\VBoxManage.exe\" ' \
                 + ' clonehd \"' + OrigFile + '\" \"' + NewFile + '\"\"'
  os.system(TheCommand)
해설 (1)
import win32api # if active state python is installed or install pywin32 package seperately

try: win32api.WinExec('NOTEPAD.exe') # Works seamlessly
except: pass
해설 (2)

Windows에서 바로 가기를 사용할 때와 같은 문제가 있는 것 같습니다. 이렇게 해보세요.

import os;
os.system("\"C:\\Temp\\a b c\\Notepad.exe\" C:\\test.txt");
해설 (4)

파이썬 &gt 서브프록스트런 '대신' 대한 '서브프록스스콜' = 3.5 사용해야 합니다.

[https://docs.python.org/3/library/subprocess.html # 높은 수준의 apiu tfsnap] [1]

import subprocess
subprocess.run(['notepad.exe', 'test.txt'])

[1]: https://docs.python.org/3/library/subprocess.html # 높은 수준의 apiu tfsnap

해설 (0)

예를 들어, 우리가 원하는 대로 실행하기 위한 장고 웹 서버 (Linux 에서) 사이의 공간이 있는지 너회의 패스 (path = '& # 39 /home/&lt you&gt /&lt first-path-section>;;;; & # 39 second-path-section&gt <;; '), 그렇게 다음과 같습니다.

import subprocess

args = ['{}/manage.py'.format('/home// '), 'runserver']
res = subprocess.Popen(args, stdout=subprocess.PIPE)
output, error_ = res.communicate()

if not error_:
    print(output)
else:
    print(error_)
  • [ 참고 ):

  • 권한 액세스을 것을 잊지 마십시오. # 39, & # 39 요르 path& boot-r &lt chmod 755 ',' >;

  • 'manage.py' 은 렉스우터블: chmod +x manage.py ''

해설 (0)

[서브프록스스콜] [1] 의 파이썬 3.7 사용합니다. 기초형상 구체화하십시오 단순화하려면 사용하여 Windows 패스:

import subprocess
subprocess.call([r'C:\Temp\Example\Notepad.exe', 'C:\test.txt'])

[1]: https://docs.python.org/3.7/library/subprocess.html # 하위 모듈에서는 사용하여

해설 (0)