2016-08-01 11 views
0

Ich versuche sqoop-Befehl in Python-Skript auszuführen. Ich hatte kein Problem, dass die Wanne Shell-Befehl zu tun, aber wenn ich versuche, Python stript auszuführen:Ausführen von sqoop in Python-Skript

#!/usr/bin/python 
sqoopcom="sqoop import --direct --connect abcd --username abc --P --query "queryname" " 

exec (sqoopcom) 

ich eine Fehlermeldung anzeigt, Ungültige Syntax, wie es zu lösen?

+0

Entweder man vergessen „Abfragename“ richtig oder es ist ein Parameter, in welchem ​​Fall zu entkommen Sie sollten mit Pluszeichen verketten – synthomat

+0

Hallo, Auch wenn ich versuche zu tun: sqoopcom = "sqoop" exec sqoopcom Ich habe einen Fehler: NameError: Name 'sqoop' ist nicht definiert – maciek2791

+0

Oh sorry. exec ist eigentlich zum Ausführen von Python-Code. Sie suchen wahrscheinlich nach einem geeigneten Aufruf innerhalb des Unterprozessmoduls oder etwas Ähnliches zum Ausführen von Shell-Befehlen. – synthomat

Antwort

1

Der Build in exec Anweisung, die Sie verwenden sind, ist für in einem Python-Programm Python-Code zu interpretieren.

Was Sie wollen, ist zu einen externen (Shell) Befehl ausführen. Dazu Sie call vom Subprozess Modul

import subprocess 
subprocess.call(["echo", "Hello", "World"]) 
verwenden könnte 210

https://docs.python.org/3/library/subprocess.html

+0

Okay Danke. Ist es möglich, diesem Befehl eine Variable zuzuordnen? (Variable als Eingabe für das Skript) – maciek2791

+0

Verwenden Sie so viele Argumente innerhalb des Aufrufbefehls, wie Sie benötigen – synthomat

2

Sie müssen überspringen "auf --query param

 
sqoopcom="sqoop import --direct --connect abcd --username abc --P --query \"queryname\" --target-dir /pwd/dir --m 1 --fetch-size 1000 --verbose --fields-terminated-by , --escaped-by \\ --enclosed-by '\"'/dir/part-m-00000" 
0

können Sie verwenden: Ungültige Syntaxfehler festgestellt, dass Sie nicht \ „Abfragename \“ backslashed haben