Exécuter python dans le script bash

Je dois exécuter le code suivant à partir d’un script shell. En général, dans des langages tels que node.js, je pourrais écrire le node -e "code here" pour exécuter le code. Comment puis-je reproduire cette fonctionnalité avec Python?

 # Python server python "import SimpleHTTPServer import SocketServer PORT = $pythonPort Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", PORT), Handler) print "serving at port", PORT httpd.serve_forever()" 

Je suppose que vous pourriez utiliser un document ici .

Par exemple, voici un script de test simple:

 #!/bin/bash -ex testnum=$1 if [ -z $testnum ]; then testnum=-1.1 fi python < 

Vous pouvez faire la même chose en plaçant votre logique python dans un script Python distinct (qui prend des arguments en ligne de commande), puis en l'appelant simplement dans votre script shell. Par exemple:

 python test.py $testnum 

Vous pouvez … c’est très déroutant (du moins c’est pour moi) dès que vous obtenez plus de … 3 lignes, mais vous le pouvez. Par exemple:

 #!/bin/bash # Python server pythonPort=8000 python -c "import SimpleHTTPServer;"` `"import SocketServer;"` `"PORT = $pythonPort; "` `"print(PORT); "` `"Handler = SimpleHTTPServer.SimpleHTTPRequestHandler; "` `"httpd = SocketServer.TCPServer((\"\", PORT), Handler); "` `"print(\"serving at port %s\" % PORT); "` `"httpd.serve_forever()" 

La partie importante est le -c (pour exécuter le texte après lui en tant que commande transmise à l’interpréteur)

Plus d’informations ici .

Je mettrais cela dans un fichier si possible, cependant. Si vous avez besoin de pouvoir configurer le port, vous pouvez utiliser sys.argsv dans votre code Python et le transmettre en tant qu’argument dans l’appel de commande.

Par exemple, mettez ceci dans un script:

run_server.py :

 #!/usr/bin/env python # Python server import sys import SimpleHTTPServer import SocketServer PORT = int(sys.argv[1]) print(sys.argv) Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", PORT), Handler) print("serving at port %s" % PORT) httpd.serve_forever() 

Et appelez-le avec python ./run_server.py 8000 Le contenu de sys.argv est une liste, où le premier élément est le nom du script, puis le rest des arguments passés dans l’appel. Dans le cas de cet exemple, ce serait: ['./run_server.py', '8000']