그래서 초기 문제였습니다 :python + subproces.check_call : 파이썬에서 함수를 호출하는 방법?
# works(1)
subprocess.check_call(["ls", "-l"])
#works(2), but "-l" argument not passed to called process
subprocess.check_call(["ls", "-l"], shell=True)
#works(3) again
subprocess.check_call("ls -l", shell=True)
#Exception(4): "bufsize must be an integer"
subprocess.check_call("ls", "-l", shell=True)
documention (https://docs.python.org/2/library/subprocess.html)에서 보면, subprocess.check_call는 서명이있는 경우 : subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
이 같은 파이썬에서 함수를 알고 def f(*args, **kwargs)
,하지만 을 , *
을 의미할까요? *args
과 같은가요?
어떤 방법이, 그 후 문서에 그주의가 :
전체 기능의 서명이는 popen 생성자와 동일
과는 popen 생성자 서명은 다음과 같습니다
Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
왜 (4)가 실패했는지 분명하지만 왜 (2)가 잘못된 방식으로 작동합니까? 그리고이 이상한 표기법을 읽는 방법 : args, *, stdin=None
?
(2) 작동하지 않는 이유를 찾을 수
업데이트. 대답 주셔서 감사합니다.이 구문의 관점에서 올바른지 이 이해합니다. 그래서 strace, 을 실행하고 파이썬이 "/ bin/sh"에 잘못된 방법으로 args를 넘기는 것을보십시오. 버그는 알려진 것으로 http://bugs.python.org/issue6689이며 거부되었습니다. 이거 슬프네.
그러나 파이썬 2.x 문서의 제 인용문에서 파이썬 3에 도입 된 경우 왜 파이썬 2에 사용됩니까? – fghj
@ user1034749, 확실하지는 않지만, 제 생각에는 설명서의 독자가'args '다음에 인수에 대한 위치 인수 대신 키워드 인수를 사용하도록 권장하는 것 같습니다. – falsetru
실제로 (2)는 sytanx 포인트 뷰에서만 유효합니다. 하지만 http://bugs.python.org/issue6689 때문에 Linux에서 사용 지점보기가 잘못되었습니다. 대답 해줘서 고마워. – fghj