2013-07-25 4 views
1

Passé presque plus de 30 minutes de mon temps en essayant tous différents peut-être. Enfin maintenant je suis épuisé. Quelqu'un peut-il s'il vous plaît aidez-moi sur ce problème de devisPython cotations de tissu

def remote_shell_func_execute(): 
    with settings(host_string='[email protected]',warn_only=True): 
      process = run("subprocess.Popen(\["/root/test/shell_script_for_test.sh func2"\],shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)") 
      process.wait() 
      for line in process.stdout.readlines(): 
        print(line) 

quand exécuter le fabuleux, je reçois

fab remote_shell_func_execute 
Traceback (most recent call last): 
File "/usr/local/lib/python2.7/site-packages/Fabric-1.6.1-py2.7.egg/fabric/main.py",line 654, in main 
docstring, callables, default = load_fabfile(fabfile) 
File "/usr/local/lib/python2.7/site-packages/Fabric-1.6.1-py2.7.egg/fabric/main.py",line 165, in load_fabfile 
imported = importer(os.path.splitext(fabfile)[0]) 
File "/home/fabfile.py", line 18 
process = run("subprocess.Popen(\["/root/test/shell_script_for_test.sh  func2"\],shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)") 
                     ^
SyntaxError: invalid syntax 

Répondre

1

Lorsque vous échapper les guillemets, la barre oblique inverse d'échappement doit aller directement avant le caractère de citation:

"[\"/..." 

Vous pouvez également utiliser des guillemets simples pour la chaîne, ce qui évite d'avoir à s'échapper du tout:

'["/...' 
+0

C'est une réponse très rapide. Laissez-moi essayer. – Sathy

+0

est-ce un problème avec les guillemets ou avec les crochets? – Sathy

+0

@Sathy Les crochets ne doivent pas être échappés dans les chaînes - seul le type de citation utilisé pour ouvrir/fermer la chaîne doit l'être. C'est simplement pour dire à Python que la chaîne ne s'arrête pas là. –

2

Utilisez simplement une seule chaîne entre guillemets.

run('subprocess.Popen(\["/root/test/shell_script_for_test.sh func2"\],shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)') 

Ou d'échapper à l'intérieur ".

run("subprocess.Popen(\[\"/root/test/shell_script_for_test.sh func2\"\],shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)") 
+0

merci Sukrit. Laissez-moi essayer que – Sathy

+0

première option n'a pas fonctionné. a reçu ci-dessous '[[email protected]] out:/bin/bash: -c: ligne 0: erreur de syntaxe près du jeton inattendu' \ ["/ root/test/shell_script_for_test.sh func2" \ ], shell = Vrai, stdin = sous-processus.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE'' La deuxième option contient cette erreur '[[email protected]] out:/bin/bash: -c: ligne 0: erreur de syntaxe proche du jeton inattendu '\"/root/test/shell_script_for_test.sh func2 "\], shell = Vrai, stdin = sous-processus.PIPE, stdout = sous-processus.PIPE, stderr = sous-processus .PIPE'' – Sathy

+0

Avez-vous des guillemets simples ailleurs dans cette commande? Si oui, alors la deuxième option fonctionnerait. –