_winapi.createprocess(executable, args subprocess 실행시
_winapi.CreateProcess(executable, args subprocess 실행시
_winapi.CreateProcess(executable, args
import subprocess
result = subprocess.run(['echo', 'echo test'],
capture_output=True,
encoding='utf8')
result.check_returncode()
print(result.stdout)
서브프로세스를 실행하는 코드를 수행하였는데.
Traceback (most recent call last):
File "e:\workspace\cleanCoding\동시성과병렬성\useSubprocess.py", line 5, in <module>
result = subprocess.run(['echo', '자식 프로세스가 보내니는 인사!'],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\jaehyun\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 548, in run
with Popen(*popenargs, **kwargs) as process:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\jaehyun\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 1024, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\jaehyun\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 1493, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
와 같은 오류가 발생하였다.
해결 방법은 .
해당 방법은
_winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2]
을 참조했으며
System32에 환경변수가 설정이 되어있지 않아서 발생한 오류라고 한다.
%SystemRoot%\System32
%SystemRoot%\System32\Wbem
%SystemRoot%\System32\wbem
해결 방법이다.
근데 저자는 %SYSTEMROOT% 경로나, 환경변수 상에서 문제가 없는데도 불구하고 계속 에러가 나고있다.
야매 해결법
에 글을 보면.
subprocess 생성자 부분의 shell 을 True로 변경하면 된다고 한다.
def __init__(self, args, bufsize=-1, executable=None,
stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=True,
shell=False, cwd=None, env=None, universal_newlines=None,
startupinfo=None, creationflags=0,
restore_signals=True, start_new_session=False,
pass_fds=(), *, user=None, group=None, extra_groups=None,
encoding=None, errors=None, text=None, umask=-1, pipesize=-1,
process_group=None):
실제로 테스트 해본 결과 True로 변경 시 정상적으로 작동하는 것 처럼 보이지만.
실제 command prompt에 buffer로 입력되는 값에서 에러가 발생한다.
또한 실제로 우리가 파이썬 커뮤니티에(내장 함수 일 경우) 검증을 받으면서 함수를 수정하는 것 이 아니기 때문에 이러한 방법은 더 큰 버그를 야기할 수 있다고 한다.
뭐 어쨌든간 win32API와 shell 상에서 문제가 발생하는 에러기에
subprocess.run(shell=False)
옵션을 추가하면 에러는 발생하지 않지만
사용할때마다. 너무 불편하다.. 음 ..
리눅스로 써버릴까..?