2014-07-24 5 views
1

J'ai un script python qui invite parfois l'utilisateur pour la saisie sous la forme de
raw_input('please provide foo').script bash qui exécute un script python qui invite l'utilisateur

J'ai un script bash qui, entre autres choses exécute ce script python:

NUM_OUTPUT=$(python -i create_lookup_txtfiles.py data-dir=/data/ad6813/pipe-data/Bluebox/raw_data/dump to-dir=/data/ad6813/caffe/data_info/$TASK_NAME bad-min=$BAD_MIN) 

je voudrais lancer ce script bash et fournir des commentaires (en tant qu'utilisateur, via le shell interactif) aux invites du script python quand il le faut. Mais quand j'exécute le script bash, je ne vois pas les invites python.

J'ai également essayé sans le drapeau -i, en vain.
Existe-t-il un moyen de résoudre ce problème?

+0

Comment exécutez-vous le script python dans le script shell? –

+0

voulez-vous une entrée utilisateur ou une saisie automatique par script? – perreal

+0

Comment le script python demande-t-il l'entrée? Est-ce qu'il détecte son environnement de fonctionnement? –

Répondre

0

Il est difficile de faire la distinction entre la chaîne d'invite et la sortie du script. Vous devez donc utiliser un fichier différent pour écrire votre invite à partir de Python. Un exemple avec TTY est ci-dessous, mais vous pouvez également utiliser stderr pour les invites:

script bash:

m=$(python d.py) 
echo "OUTPUT $m" 

script python:

import os 
tty=os.open("/dev/tty", os.O_RDWR) 
os.write(tty, "Enter> "); 
s=raw_input("") 
print s 

le même script bash devrait également fonctionne avec les invites stderr:

script python:

import sys 
sys.stderr.write("Enter> "); 
s=raw_input("") 
print s 
+0

Cela fonctionne pour les entrées mais les impressions sont toujours cassées. – Kasisnu

+2

écrire tous les messages interactifs à stderr à partir de python. mettez seulement la chose que vous voulez capturer sur stdout. – perreal

+0

Pourquoi utiliser "print s" alors? Ne devrait-il pas simplement imprimer en utilisant stderr? – Kasisnu

Questions connexes