Python 하위 프로세스에 문제를 앰퍼샌드
-
02-07-2019 - |
문제
나는 현재는 데 중요한 문제와 python 스크립트입니다.스크립트를 실행되는 임의의 명령을 통해서 핸들러로 변환하 잘못된 오류 보고를 올바른 오류 보고를 사용할 수 있습니다.
이 문제는 내가 하는 점점 스크립트가 제대로 작동하려면 윈도우에서 명령을 포함하는 앰퍼샌드 그것에서의 경로입니다.나는 시도했을 인용하는 명령을 탈출,앰퍼샌드와^및 둘 다 작동합니다.나는 지금 아이디어.어떤 방법이 있나요?
을 명확히 하에서 응답을 현재:
- 내가 사용하여 하위 프로세스 모듈
- 나는 전달하는 명령 라인+에서 인수로 목록
- 문제입하는 경로로 명령에 자체의 인수
- 해봤을 인용하는 명령입니다.그것이 원인
[Error 123] The filename, directory name, or volume label syntax is incorrect
류 - 나는 사용하지 않는 셸 인수(도
shell=false
) - 경우에는 그것이 문제,나를 잡아 관 stderr 에 대한 처리는 하지만,그것을 무시하고 표준출력과 표준입력
- 그것은 단지 사용하기 위해 윈도우에서는 현재 및 예상대로 작동하는 다른 모든 경우에서 나는 지금까지 테스트.
- 는 명령은 실패입니다:
p=는 하위 프로세스.Popen(prog,stderr=는 하위 프로세스.파이프 bufsize=-1)
을 때 첫 번째 요소의 목록에'prog'에 포함된 앰퍼샌드.인용하는 이 첫 번째 문자열이 작동하지 않습니다.
해결책
목록을 사용하고 있고 쉘 확장이 없는지 확인하십시오.
subprocess.Popen(['command', 'argument1', 'argument2'], shell=False)
다른 팁
적절한 답변은 그보다 더 많은 정보가 필요합니다. 당신은 실제로 무엇을하고 있습니까? 어떻게 실패합니까? 하위 프로세스 모듈을 사용하고 있습니까? 인수 목록과 shell = false (또는 쉘 인수 없음)를 전달하고 있습니까? 아니면 실제로 쉘을 호출하고 있습니까?
&가 포함 된 주장을 인용 해보십시오.
wget "http://foo.com/?bar=baz&baz=bar"
일반적으로 Linux 쉘에서해야 할 일입니다.
"ampersand를 탈출 ^"
확실합니까 ^
Windows의 탈출 문자입니까? 사용해서는 안됩니다 \
?
응답 내 자신의 질문:
을 인용하는 실제 명령을 통과하면 매개 변수는 목록이 정상적으로 작동하지 않음(명령이 첫 번째 항목의 목)그래서 문제를 해결하기 위해 내가 목록으로 공백으로 구분된 문자열을 전달되는 것으로 하위 프로세스다.
더 나은 솔루션도 환영합니다.
다음과 같은 상황을 시도합니다.
exe = 'C:/Program Files (x86)/VideoLAN/VLC/VLC.exe'
url = 'http://translate.google.com/translate_tts?tl=en&q=hello+world'
subprocess.Popen([exe, url.replace("&","^&")],shell=True)
이것은 작동합니다.