2016-04-11 30 views
0

'dan bir bash komut dosyası çağrılırken hata alıyorum, bir python komut dosyasının içinde başka bir python betiği içinde çağrılan bir bash komut dosyasını çağırmam gereken bir durum var."Sözdizimi hatası: Sonlandırılmamış tırnak işareti" hatası, Python

download-output-files.py:

#!/usr/bin/env python 
import os 
import sys 

for i in node_path: 
    cmd="python watcher.py "+i 
    os.system(cmd) ##calling another python script 

watcher.py:

#!/usr/bin/env python 
import os 
import time 

     if 'finish' in child: 
      print "finish found" 
     cmd="./copy_output_file.sh "+node 
     os.system(cmd) ##Calling shell script here 

copy_output_file.sh:

#!/bin/bash 

filepath=$1 
cp ff /home/likewise-open/TALENTICA-ALL/mayankp/kazoo/$filepath 

koşuyorum indirme-çıktı-files .py, watcher.py numaralı telefonu arar. bu da copy_output_file.sh çağırır ve aşağıdaki I karşıya hatadır: Python kabuğunda aynı komutları çalıştırdığınızda

[email protected]:~/kazoo$ python download-output-files.py 

finish found 
sh: 1: Syntax error: Unterminated quoted string 

, başarıyla bash komut dosyasını çalıştırır. Neyi kaçırıyorum?

+2

Kabuk betiğindeki seçilmemiş değişkenlerden kaynaklanıyorsa şaşırmam. Ama * neden * Python ile kolayca yapılabilecek bir şey için bir kabuk betiği kullanıyorsun ?! – Biffen

+3

Bu soru için çok fazla kod gibi görünüyor. Minimal bir örneğe göre kırpabilirseniz yakın oyumu geri çekerim. –

+0

@ChrisMartin, kodumu en az düzeyde tutarak düzenledim. Şimdi yardım edebilir misiniz? –

cevap

3

Dizeleri kabuk komutlarıyla birleştirmek genellikle yanlıştır. Çalıştırmaya çalıştığınız komutları tam olarak öğrenmek için, os.system(cmd) çağrılarınızdan önce print(cmd) eklemeye çalışın ve sorunun ne olduğunu (büyük olasılıkla içinde kesme işareti bulunan bir dosya adı) göreceksiniz.

os.system("python watcher.py "+i) yerine subprocess.call(['python', 'watcher.py', i]) ve os.system(cmd="./copy_output_file.sh "+node) yerine subprocess.call(['/copy_output_file.sh', node]) kullanmayı deneyin.

+0

os.system (cmd) 'den önce bir baskı (cmd) ekledim ve işe yaradı. Teşekkürler –