>

r 아래와 같이 파이프 또는 세미콜론으로 입력 한 전체 명령 행을 캡처 할 수 있는지 알고 싶습니다.

와이즈 비즈

또는

와이즈 비즈

오늘 시도에서 sys.argv는 파이프/세미콜론의 왼쪽에 입력 된 내용 만 반환하고 두 번째 부분은 독립적 인 명령으로 실행됩니다 (이해할 수는 있지만 바람직하지 않은 것은 아닙니다).

코드를 시도했습니다 :

$>python foo.py arg arg | arg arg

명령을 강제로 인용하고 (그리고 시스템이 모든 것을 단일 명령 행으로 보도록 강요하지만) 작동하지 않고 두 번째 부분은 중단 후에 계속 실행됩니다.

$>python foo.py arg arg ; arg arg


  • 답변 # 1

    Python은 해당 부분에 액세스 할 수 없습니다. 이것들은 파이썬 명령 인수의 일부가 아니며,에 입력됩니다. 파이프, 인용 부호 및 세미콜론은 쉘 구문의 일부이며 쉘이 시작하는 하위 프로세스의 명령 행이 아닙니다.

    쉘은 당신이 제공 한 문법을 ​​분리 한 다음 python 에 전달 된 인수만으로 파이썬을 호출합니다.  이진. 하위 프로세스에서 전체 셸 명령을 검색 할 수 없습니다. 잠재적 인 보안 문제 일 수 있습니다.

    정보를 파이썬 스크립트에 전달하려면명령 인수에서 수행해야합니다. 즉, 인수에 따옴표를 포함해야하는 경우 먼저 셸 수준에서 따옴표를 이스케이프해야하므로 셸 구문으로 해석되지 않습니다 (예 :

    python foo.py arg1 '|' arg2
    
    
    그런 다음 sys.argv 에서

    사용 가능  으로

    ['foo.py', 'arg1', '|', 'arg2']
    
    
    | 주위의 작은 따옴표  쉘에게 해당 문자를 인수 텍스트로 취급하도록 지시하십시오.

    인용 방법에 대한 세부 사항은 특정 쉘 환경에 대한 문서를 참조해야합니다. 예를 들어 bash를 사용하는 경우 인용에 대한 Bash 매뉴얼 섹션을 읽으십시오.

관련 자료

  • 이전 c# - XamDataGrid에서 필터링되지 않은 모든 행을 어떻게 반복합니까?
  • 다음 c# - Azure Service Bus에서 메시지 수신 모드가 ReceiveAndDelete 인 경우 메시지의 TTL은 무엇입니까?