2017-11-21 10 views
0

내가 원한 것은 스크립트를 실행할 바탕 화면 바로 가기를 갖는 것입니다. 나는 배치와 파이썬을 사용하려고 노력해 왔지만 실제로 작동한다면 어떤 언어를 사용하든 상관하지 않습니다. bash 쉘 (Linux 용 Windows 서브 시스템)을 열고 쉘을 열린 상태로 유지하면서 간단한 명령을 실행하는 스크립트가 필요합니다. 처음에는 이것이 간단 할 것이라고 생각했지만 지금은 가능한지 의문을 품고 있습니다. 나는 bash를 열어서 열어 놓을 수있는 간단한 배치 파일을 만들었지 만, 내가 넣은 테스트 명령은 그것을 쉘로 만들지 않았다. (나는 정말로 그것을 기대하지는 않았지만 이것을 할 수있는 좋은 방법을 생각할 수는 없기 때문에 나는 무작위로 시도했다). 이 후스크립트가 WSL bash 셸을 열고 명령을 보낼 수 있습니까?

bash 
cowsay test 
PAUSE 

나는 떠들썩한 파티를 열고 열린 쉘을 유지하고 명령을 실행하는 것입니다 쉘 스크립트를 실행 파이썬 스크립트를 사용하여 시도 : 여기 내가 사용하는 배치 파일입니다. 다음은 Python 스크립트입니다.

import os 
import time 

os.system("start /wait bash /c {./test.sh}") 
while 1: 
    time.sleep(2) 

어떤 이유인지, bash를 찾을 수 없다는 오류가 발생합니다. 이것은 프로젝트 나 그 무엇을위한 것이 아닙니다. 실제로 친구의 컴퓨터에 대한 농담이지만, 이것이 가능한지 정말로 알고 싶습니다. 어떤 사람이 이것이 어떻게 작동하는지에 대한 아이디어가 있다면, 나는 아이디어가 없어서 다른 비슷한 질문을 찾을 수 없어서 고맙게 생각합니다.

+0

확실하지처럼 뭔가를 할 수 있지만,'시도의 bash -c 'cowsay test'' –

+0

WSL의 bash.exe는 64 비트가 그 설치의 빌드입니다 실제 System32. 파이썬이 32 비트라고 가정하고, "System32"는 "SysWOW64"로 리다이렉트됩니다. WOW64 앱 (* WOW64 앱만)은 실제 "System32"디렉토리를 "SysNative"로 참조 할 수 있습니다. 'bash_path = os.path.join (os.environ [ 'SystemRoot'], 'SysNative', 'bash.exe')'. – eryksun

+0

stdin, stdout 및 stderr을 파이프와 두 개의 전용 리더 스레드 (stdout 용과 stderr 용)에 리디렉션 한'subprocess.Popen'을 사용해야합니다. 'shell = True' 나 배치 스크립트를 사용하지 마십시오; CMD는 어떤 식 으로든이 문제에 개입 할 필요가 없습니다. – eryksun

답변

0

예, 당신은 당신이 무슨 뜻인지이

import subprocess 

from subprocess import Popen 
p = Popen("batch.bat", cwd=r"C:\Path\to\batchfolder") 
stdout, stderr = p.communicate()