2017-01-05 1 views
0

에서 파이썬 하위 프로세스로주기 위해 나는주기 위해있는 bash는 스크립트가 :실행 bash는 스크립트가 배경

#!/bin/sh 
echo -n > "/path/output.txt" 
for i in {1..10} 
do 
echo "Test" >> "/path/output.txt" 
done 

내가 파이썬의 지시 동안 백그라운드에서 실행하고 싶습니다 스크립트가 수행됩니다.

import subprocess 
subprocess.Popen('test.sh') 

내가 어떤 출력을 얻을 수 없거나 출력은 한 번만 "경우 output.txt"에 기록됩니다 는 파이썬 subprocess을 사용하고 있습니다.

+0

당신의 그녀 - 뱅이다 잘못된,'#!/bin/sh'이어야합니다. – Inian

+0

그 파일에 리터럴'-n'을 쓰지 않으려면'echo -n ""또는 뭔가를 원할 수도 있습니다. 파일을 만들고 싶다면'touch'을 시도하십시오. – meatspace

+0

@ touch 터치를 사용하는 경우 @meatspace 이미 존재하는 경우 파일을 덮어 쓸 수 없습니다. –

답변

2

일반적으로 루프와 함께 중괄호 확장을 사용하지 마십시오. 셸은 반복 할 수 있기 전에 전체 식을 확장해야합니다.

for ((i=1; i<=10; i++)); do 
    ... 
done 

또는 (모든 POSIX 호환 쉘)을 while 루프를 사용 : 하나 (그것을 지원하는 bash 같은 껍질에) C 스타일 for 루프를 사용

i=1 
while [ "$i" -le 10 ]; do 
    ... 
    i=$((i+1)) 
done 
+0

죄송합니다. [$ i -le 10] while i = $ (($ i + 1)). 좋습니다, 그들은 둘 다 추측합니다 –

+0

인수는 산술 문맥에서만 정수가 될 수 있으므로 식별자는 자동으로 역 참조됩니다. – chepner

0
for i in {1..10} 

sh의 올바른 구문이 아닙니다. Bash를 사용하여 질문에 태그를 추가 했으므로 첫 번째 줄을

으로 대체하십시오.
#!/bin/bash