2017-05-10 2 views
2

PowerShell을 사용하는 Windows 컴퓨터에서 Python 3을 실행 중입니다. 파이썬 파일을 실행하고 와일드 카드 문자를 사용하여 여러 파일 (file1.html, file2.html 등)을 인수로 전달하려고합니다. 나는 다음과 같은 몇 가지 단계를 수행,이 작업을 얻을 수 있습니다 :powershell 와일드 카드로 파일 이름을 인수로 전달

PS $files = Get-Item .\file*.html 

PS python mypythonfile.py $files 

내 질문이이 Get-Item를 사용할 필요하고 변수에 결과를 할당하지 않고 할 수 있습니까? 이 같은 파일을 실행하려고했는데 python mypythonfile.py .\file*.html하지만 PowerShell이 ​​와일드 카드를 구문 분석하지 않고 와일드 카드로 문자열을 전달하기 때문에 파이썬 인터프리터에서 오류가 발생합니다.

+0

이것이 실제로 파이썬과 관련이 없다고 생각합니다. – Ajean

+0

@Ajean - 파이썬 태그를 추가하지 않아야 할 것 같습니다. 저는이 기능을 처음 접했을 뿐이며 질문의 컨텍스트에 도움이 될 것이라고 생각했습니다. PowerShell에 관한 질문입니다. 파이썬이 아닙니다. – ddetts

+0

아무 문제 없지만, 나는 앞을 내다가 그것을 제거했습니다. 질문의 나머지 부분은 완벽하게 훌륭합니다 (Powershell 사람이 아니기는하지만 대답 할 수는 없지만 ...). – Ajean

답변

3

당신이 대화 형 콘솔에있는 것으로 보인다. get-item의 결과를 변수에 할당 할 필요는 없습니다. 이 시도 :

python mypythonfile.py (get-item .\file*.html).FullName 
+0

두 번째 제안은 패턴이 단일 파일로 확장되지 않는 한 PowerShell v3 이상이 필요하다는 점에 유의하십시오. –

0

Get-Item이 문자열을 반환하지 않지만 여러 항목을 포함하는 System.IO.FileInfo 개체를 반환하는지 확인하려면 $files | get-Member을 수행하십시오. 파일 이름에 공백이없는 경우
이 할 수있는 :

$files = (Get-Item .\file*.html) -join(' ') 

그렇지 않으면

$files = '"'+((Get-Item .\file*.html) -join('" "'))+'"' 
3

동안이 제대로 GET-항목에 의해 생성 된 결과 객체의 .FullName 속성을 사용하여, 당신이 정말로 파이썬에게 파일의 이름을 전달해야 작동하지만

python mypythonfile.py (get-item .\file*.html) 

Windows 셸 (PowerShell 및 CMD)은 glob patterns을 지원하지만 패턴 자체를 확장하지는 않습니다 (Unix 셸과 달리). 대신 globbing을 지원해야하는 명령은 자체적으로 와일드 카드 확장을 구현해야합니다.

import sys 
import glob 

for arg in glob.glob(sys.args[1]): 
    print(arg) 

예를 들어, 호출 할 때 스크립트가 와일드 카드 인수를 처리 할 수 ​​있습니다 :

파이썬은 대한 glob 모듈을 제공 같은 :

python script.py .\file*.html 

그렇지 않으면 당신은 경로의 목록을 당신을 위해 와일드 카드 패턴을 확장하고 반환하는 PowerShell을 cmdlet에, 예를 사용해야합니다 Get-ChildItem.

$files = Get-ChildItem .\file*.html | Select-Object -Expand FullName 
python script.py $files 

을하거나 expression에서 PowerShell을 문을 실행 : 어느 변수의 목록을 수집

python script.py (Get-ChildItem .\file*.html | Select-Object -Expand FullName) 

또는 당신은 파이썬 스크립트 read from stdin 수 :

import fileinput 

for line in fileinput.input(): 
    print(line.replace('\n','')) 

와 파이프를 파일 목록을 스크립트에 복사하십시오.

Get-ChildItem .\file*.html | Select-Object -Expand FullName | python script.py