2013-05-01 4 views
1

J'ai un ancien python. Donc, ne peut pas utiliser sous-processus. J'ai deux scripts Python. Un fichier primary.py et un fichier secondary.py. Lors de l'exécution de primary.py, je dois exécuter secondary.py.Exécution d'un autre script python avec os.system

Format pour exécuter secondary.py est 'python secondary.py Argument'

os.system('python secondary.py Argument')...is giving error saying that can't open file 'Argument': [Errno 2] No such file or directory

+0

Vous * peut * utiliser le [sous-processus backport] (https://code.google.com/p/python-subprocess32/). –

+0

Vous mentionnez dans un commentaire ci-dessous que vous utilisez python 2.6. Le sous-processus est disponible pour cette version de python. – SethMMorton

Répondre

1

Vu le code que vous avez décrit, cette erreur peut venir pour trois raisons:

  • python ISN 't sur votre PATH, ou
  • secondary.py ne se trouve pas dans votre répertoire de travail actuel.
  • Argument ne figure pas dans votre répertoire de travail actuel.

De votre question éditée, il semble que c'est le dernier des trois, ce qui signifie que le problème a probablement rien à voir avec system du tout ... mais nous allons voir comment résoudre tous les trois de toute façon. D'abord, vous voulez un chemin vers le même python qui exécute primary.py, ce qui est sys.executable pour.

Ensuite, vous voulez un chemin vers secondary.py. Malheureusement, pour celui-ci, il n'y a aucun moyen (en Python 2.3) qui est garanti pour fonctionner ... mais sur de nombreux systèmes POSIX, dans de nombreuses situations, sys.argv\[0\] sera un chemin absolu primary.py, de sorte que vous pouvez simplement utiliser dirname et join sur os.path pour convertir cela en un chemin absolu à secondary.py.

Et puis, en supposant Argument est dans le répertoire de script, faire la même chose pour que:

my_dir = os.path.dirname(sys.argv[0]) 
os.system('%s %s %s' % (sys.executable, 
         os.path.join(my_dir, 'secondary.py'), 
         os.path.join(my_dir, 'Argument'))) 
0

Quelle version python avez-vous? Pourriez-vous afficher le contenu de votre secondary.py? Pour version plus récente, il semble fonctionner correctement:

[email protected]:$ cat f.py 
import os 
os.system("python s.py Arg") 

[email protected]:$ cat s.py 

print "OK!!!" 
[email protected]:$ python f.py 
OK!!! 
[email protected]:$ 
+0

Ce n'est pas parce que cela fonctionne dans un scénario que cela fonctionne dans tous les scénarios possibles. Votre code ne fonctionnera pas si, par exemple, 'python' n'est pas sur le PATH, et vous faites'/opt/python23/bin/python f.py' sur le shell. – abarnert

+0

J'aurais dû être plus clair. Les deux fichiers primary.py et secondary.py sont dans le même répertoire ..... J'ai python 2.6.2 ...... J'ai besoin d'exécuter secondary.py Argument sur le shell .... secondary.py recherche les fichiers avec le nom "Argument" dans le répertoire courant et les imprime ... Il fonctionne bien quand j'exécute secondary.py indépendamment .... seulement quand j'essaye de le faire via primary.py que j'obtiens l'erreur ..... Merci encore beaucoup – user2340760

+0

Oui, je sais très bien que l'exemple n'est pas une preuve. De toute façon pour moi c'est très inattendu d'avoir un message comme: 'impossible d'ouvrir le fichier 'Argument'' - s'il y aurait un problème avec PATH alors le message indiquera que' python' ou 'secondary.py' n'a pas pu être ouvert. – ddzialak

Questions connexes