2017-11-28 5 views
0

저는 우분투를 사용하고 있으며 [웹 사이트 이름]과 [파일 경로]를 명령 줄 목록에 입력해야하는 간단한 자동화를 시도하고 있습니다. 하위 프로세스와 함수를 사용하고 있습니다. 나는 "ls"명령어를 사용하여 더 간단한 것을 시도했다.subprocess.call 명령을 사용하여 파일 경로를 가리키는 문자열을 Linux 터미널에 입력하는 방법은 무엇입니까?

from subprocess import call 
text = raw_input("> ") 
("ls", "%s") % (text) 

"buffsize는 정수 여야합니다."로 반환됩니다. 나는 그것이 무엇인지 알기 위해 노력했다. 그리고 명백하게 나는 명령을 명단으로 써야했다. 그래서 나는 코드 작성을 시도하는 주요한 일을 시도했다.

from subprocess import call 
file_path = raw_input("> ") 
site_name = raw_input("> ") 
call("thug", -FZM -W "%s" -n "%s") % (site_name, file_path) 

첫 번째 "% s"에서 유효하지 않은 구문으로 전달되었습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

+0

오늘 거의 동일한 질문에 답변했으며 예제를 제공했습니다. https://stackoverflow.com/questions/47518944/open-new-gnome-terminal-and-run-command/47519082#47519082 – user1767754

+1

왜 계속합니까? '% '를'튜플 (tuple)'에 적용하려고합니까? –

답변

0

.

("ls", "%s") % text # Broken 

당신은 아마

("ls", "%s" % text) 

의미하지만 단지 "%s" % string 분명히 단순히 string를 반환하는 것입니다, 그래서 여기에 서식을 사용할 필요가 없습니다.

("ls", text) 

이것은 여전히 ​​유용하지 않습니다. call을 잊었습니까?

또한 인수에 인용 부호가없는 문자열을 call으로 사용할 수 없습니다.

call("thug", -FZM -W "%s" -n "%s") % (site_name, file_path) # broken 

는 형식 문자열을 사용하는 경우, 형식은 형식 문자열에 인접한 일어날 필요가, 다시 -FZM 및 인용 -W하고 있어야합니다. call()에 대한 첫 번째 인수가 적절한 목록 또는 긴 단일 문자열 중 하나입니다 방법도

call(["thug", "-FZM", "-W", site_name, "-n", file_path]) 

공지 사항 (이 경우 당신은 당신이 avoid if you can에 할, shell=True 필요). 새 스크립트를 작성하는 경우

, 당신은 가장 확실히 파이썬 3를 표적으로 진지하게생각한다 (이 경우 당신은 너무 subprocess.run()input() 대신 raw_input()에 피벗 할). Python 2는 몇 년 전에는 Py3k의 채택이 여전히 느리기 때문에 몇 년 전에 푸시되었지만 Python 2는 원래 발표 된 수명 종료 날짜를 이미 지나쳤습니다. 더 이상 존재하지 않아야하며, Py3에 들어가기를 원합니다. 이것이 미래가있는 곳입니다.

0

다음은 subprocess.call을 사용하여 실행 가능한 python 파일을 호출하는 방법의 전체 예입니다. argparse을 사용하여 입력을 올바르게 구문 분석하십시오.

파이썬 파일

은 (sandboxArgParse.py) 호출 될 :

import argparse  
parser = argparse.ArgumentParser() 

parser.add_argument("--filePath", help="Just A test", dest='filePath') 
parser.add_argument("--siteName", help="Just A test", dest='siteName') 
args = parser.parse_args() 
print args.siteName 
print args.filePath 

귀하의 호출 파이썬 파일 : 당신은 튜플에 %을 사용할 수 없습니다

from subprocess import call 


call(["python","https://stackoverflow.com/users/dev/python/sandboxArgParse.py", "--filePath", "abcd.txt", "--siteName", "www.google.com"]) 
+0

필자는 명령 줄 인수를 구문 분석하는 것이 ** 대화 형 입력보다 ** 좋은 방법이라고 생각하지만이 대답이 OP를 도울 것이라고는 생각하지 않습니다. – tripleee

+0

: D 그래서 그는 당신이 @tripleee!. 나는 깨끗한 대체 솔루션을 제공하고 있습니다. 당신의 대답은 아마도 문제를 해결할 것이고, 제 대답은 아름다움으로 일을하는 동기가 될 것입니다. – user1767754