J'utilise/bin/tcsh comme shell par défaut. Cependant, la commande de style tcsh os.system ('setenv VAR val') ne fonctionne pas pour moi. Mais os.system ('export VAR = val') fonctionne. Donc, ma question est comment puis-je connaître la commande os.system() run sous quel shell?os.system() exécute la commande sous quel shell linux?
Répondre
os.system()
appelle simplement l'appel système system()
("man 3 system
"). Sur la plupart des * nix, cela signifie que vous obtenez /bin/sh
.
Notez que export VAR=val
est techniquement pas syntaxe standard (bien que bash
le comprenne, et je pense que ksh
aussi). Il ne fonctionnera pas sur les systèmes où /bin/sh
est réellement le shell Bourne. Sur ces systèmes, vous devez exporter et définir des commandes séparées. (Cela fonctionnera également avec bash
.)
De nos jours, vous devriez utiliser le module Subprocess au lieu de os.system()
. Selon la documentation, le shell par défaut est /bin/sh
. Je crois que os.system()
fonctionne de la même manière.
Editer: Je dois également mentionner que le module de sous-processus vous permet de définir l'environnement disponible pour le processus d'exécution via le paramètre env
.
Si votre commande est un fichier shell et que le fichier est exécutable, et que le fichier commence par "#!", Vous pouvez choisir votre shell.
#!/bin/zsh
Do Some Stuff
Vous pouvez écrire ce fichier, puis l'exécuter avec subprocess.Popen(filename,shell=True)
et vous serez en mesure d'utiliser un shell que vous voulez.
En outre, veillez à lire this environ os.system
et subprocess.Popen
.
J'allais faire remarquer que shell = True n'est pas nécessaire, mais alors il m'est apparu: est-ce le shell qui est responsable de l'interprétation des shebangs et qui agit en conséquence? –
Correct. Le shell interprète les "magic" octets "#!" pour voir quel autre shell devrait vraiment utiliser ce fichier. –
Était en train de lire Executing BASH from Python, puis 17.1. subprocess — Subprocess management — Python v2.7.3 documentation, et j'ai vu l'argument executable
; et il semble fonctionner:
$ python
Python 2.7.1+ (r271:86832, Sep 27 2012, 21:16:52)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.popen("echo $0").read()
sh
>>> import subprocess
>>> print subprocess.call("echo $0", shell=True).read()
/bin/sh
>>> print subprocess.Popen("echo $0", stdout=subprocess.PIPE, shell=True).stdout.read()
/bin/sh
>>> print subprocess.Popen("echo $0", stdout=subprocess.PIPE, shell=True, executable="/bin/bash").stdout.read()
/bin/bash
>>> print subprocess.Popen("cat <(echo TEST)", stdout=subprocess.PIPE, shell=True).stdout.read()
/bin/sh: Syntax error: "(" unexpected
>>> print subprocess.Popen("cat <(echo TEST)", stdout=subprocess.PIPE, shell=True, executable="/bin/bash").stdout.read()
TEST
Hope this helps quelqu'un,
Cheers!
Je suis cette personne. C'est ce que je cherchais. Merci d'avoir noté ceci :) – Thorn
Oui, ceci est tellement vrai quand on passe de stdout d'une simple commande à plusieurs commandes en utilisant tee, quelque chose comme 'command out = stdout | tee> (commande_1 in = stdin)> (commande_2 in = stdin) '. Merci d'avoir posté ceci, bravo ~ – CheeHow
- 1. javascript (spidermonkey) comment exécuter une commande linux depuis js shell?
- 2. Groovy exécuter « cp * » commande shell
- 3. Livre sur la programmation de shell Linux
- 4. dans une commande shell
- 5. Linux shell équivalent sur IIS
- 6. Développement sous GUI sous Linux
- 7. Quel est l'équivalent Perl du "$ @" du shell?
- 8. sortie couleur de commande shell dans Ruby
- 9. Quel est le meilleur moyen de communication interprocesseur sous Linux?
- 10. Assemblage sous Linux
- 11. La commande md5sum linux fonctionne-t-elle correctement?
- 12. Quel chemin à parcourir sous Linux (Qt ou KDevelop)
- 13. L'équivalent Linux de la commande DOS "start"?
- 14. Besoin de dépannage sous UNIX avec le programme de script shell et la commande IF..THEN
- 15. Pourquoi subprocess.Popen() avec shell = True fonctionne différemment sous Linux et Windows?
- 16. comment convertir la chaîne en fichier entier binaire en utilisant la ligne de commande sous Linux
- 17. Vous voulez appeler une commande shell Linux à partir de Java
- 18. Commande shell python - pourquoi ça ne marchera pas?
- 19. Problème avec l'application .net sous Linux, ne fonctionne pas à partir du script shell
- 20. Agrégation de ports sous Linux
- 21. Recursive Bulk Edit sous Linux
- 22. Gravure de DVD sous Linux
- 23. Répertoire du programme en cours sous Linux?
- 24. Django Shell raccourci sous Windows
- 25. Comment ajouter un message dans la ligne de commande linux lors de la connexion?
- 26. Commande Shell qui parcourt les lignes?
- 27. exécution de la commande même dans plusieurs scripts shell
- 28. Exécute Fine dans le shell de la prison mais pas dans le navigateur
- 29. traite la mémoire d'utilisation sous Linux
- 30. Contrôle de la souris sous Linux
En effet,/bin/sh (qui est presque toujours une forme de shell bourne) est presque toujours ce que l'on entend quand quelque chose * nix-related dit "shell" sans qualification. Il peut également être utile de noter que si vous avez vraiment besoin d'exécuter un extrait sous un shell spécifique autre que bourne, vous pouvez passer la fonction quelque chose comme '/ path/to/tcsh -c' votre extrait tcsh ici ''. –