2010-10-28 6 views
0

J'ai un script, client.py, qui lit la ligne de commande args droite comme un script (non enveloppé dans une fonction comme principale()), comme suit:Comment appeler un script python avec des arguments de ligne de commande?

opts, args = getopt.getopt(sys.argv[1:], "l:r:a:j:b:f:n:u:") 

et imprime un tas de trucs.

Je dois appeler ce script à partir de mon code (sur Google App Engine, si cela est important). Il semble que l'appel

import client 

exécute client.py en tant que script, mais comment puis-je spécifier les arguments?

Répondre

2

Vous ne devriez pas faire ceci à moins que vous ayez à: si vous avez deux manuscrits de Python ils peuvent communiquer dans Python au lieu de par l'intermédiaire d'un analyseur de ligne de commande. Réécrivez client.py avec une vérification if __name__ == "__main__" puis appelez sa fonction principale directement depuis votre script.

Si vous n'avez pas l'option de le faire (et vous devriez éviter ce cas si possible), vous pourriez être en mesure de définir sys.argv; Je ne suis pas sûr si GAE vous permet de faire cela. Vous pouvez également utiliser subprocess.Popen.

1

Vous ne pouvez pas. Utilisez subprocess ou os.exec*(), ou modifiez l'autre script pour utiliser une sentinelle principale qui analyse les arguments puis les passe à une fonction main(), puis appelez le main() avec les arguments appropriés.

En outre, import client.

1

Google AppEngine utilise un significantly modified version of Python et désactive de nombreuses bibliothèques système et sous-processus ainsi que la plupart des modules C python. Pour appeler ce script, vous devez importer un point d'entrée et l'appeler. Je crois que sur la convention est d'appeler votre entrypoint principal et appelez cela, en passant tous les args dont il pourrait avoir besoin. C'est une bonne pratique en général. Par exemple dans l'application appelante:

from client import main 
main() 
+0

Merci pour le lien - Je ne connaissais pas les changements dans le Python de GAE. – jbreed

Questions connexes