2011-06-14 28 views

Respuesta

12

Si necesita capturar STDOUT:

my $ret = `/usr/bin/pdf2txt.py arg1 arg2`; 

Puede capturar fácilmente STDERR redirigiéndola a STDOUT:

my $ret = `/usr/bin/pdf2txt.py arg1 arg2 2>&1`; 

Si necesita capturar el estado salida, entonces usted puede utilizar:

my $ret = system("/usr/bin/pdf2txt.py arg1 arg2"); 

Tome en cuenta que tanto `` y system() bloque hasta que el programa termine la ejecución.

Si no desea esperar, o necesita capturar STDOUT/STDERR y salir del estado, entonces debe usar IPC::Open3.

+3

Es mejor usar 'system '/usr/bin/pdf2txt.py', $ arg1, $ arg2' ya que esto evitará problemas (y errores peligrosos) con la interpolación del intérprete de comandos. – friedo

8
my $output = `/usr/bin/pdf2txt.py arg1 arg2`; 
+0

+1 debería funcionar –

+3

asegúrese de que el script sea ejecutable (chmod + x) y que tenga un hashbang adecuado (por ejemplo, #!/Usr/bin/env python). – damg

2

Si usted no necesita la salida de guión, pero desea que el código de retorno, utilice system():

... 
my $bin = "/usr/bin/pdf2txt.py"; 
my @args = qw(arg1 arg2 arg3); 
my $cmd = "$bin ".join(" ", @args); 

system ($cmd) == 0 or die "command was unable to run to completion:\n$cmd\n"; 
+3

No te unas a '@ args'. Use 'system $ bin, @args;' - eso evita una serie de errores potencialmente dañinos. – friedo

Cuestiones relacionadas