2017-01-05 5 views
0

У меня есть Баш скрипт с для цикла в нем называется test.sh:Запуск Баш скрипт с для цикла как подпроцесс Python в фоновом режиме

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

Я хотел бы, чтобы запустить его в фоновом режиме во время обучения на Python сценарий. Я использую Python subprocess:

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

я не могу получить любой выход или выход записывается в «output.txt» только один раз.

+0

Ваши она-Взрывы неверно, это должно быть '#!/bin/sh' – Inian

+0

Возможно, вам также понадобится' echo -n "" 'или что-то еще, если вы не хотите, чтобы в этот файл был записан литерал' -n'. Если вы просто хотите создать файл, попробуйте 'touch'. – meatspace

+0

@meatspace, если я использую touch, я не могу перезаписать файл, если он уже существует –

ответ

2

Как правило, не используют фигурные скобки разложения с петлями. Оболочка должна расширить все выражения, прежде чем вы сможете перебирать их. Либо использовать цикл C-стиль for (в оболочках, как bash, которые поддерживают его):

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

или использовать while петли (в любом POSIX-совместимой оболочке):

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

Извините: while [$ i -le 10] do i = $ (($ i + 1)). Ок, я думаю, они оба rigtht –

+0

Аргументы могут быть целыми только в арифметическом контексте, поэтому идентификаторы автоматически разыгрываются. – chepner

0
for i in {1..10} 

Недействительный синтаксис для sh. Вы помечены вас вопрос с Bash, так заменить первую строку с

#!/bin/bash 

 Смежные вопросы

  • Нет связанных вопросов^_^