【发布时间】:2025-12-26 01:15:15
【问题描述】:
我需要使用 Perl 脚本中的少量参数调用“/usr/bin/pdf2txt.py”。我该怎么做?
【问题讨论】:
我需要使用 Perl 脚本中的少量参数调用“/usr/bin/pdf2txt.py”。我该怎么做?
【问题讨论】:
如果您需要捕获STDOUT:
my $ret = `/usr/bin/pdf2txt.py arg1 arg2`;
您可以轻松捕获 STDERR 并将其重定向到 STDOUT:
my $ret = `/usr/bin/pdf2txt.py arg1 arg2 2>&1`;
如果你需要捕捉退出状态,那么你可以使用:
my $ret = system("/usr/bin/pdf2txt.py arg1 arg2");
请记住,`` 和 system() 都会阻塞,直到程序完成执行。
如果你不想等待,或者你需要同时捕获 STDOUT/STDERR 和退出状态,那么你应该使用IPC::Open3。
【讨论】:
system '/usr/bin/pdf2txt.py', $arg1, $arg2,因为这样可以避免shell插值出现问题(和危险的错误)。
$? 使用反引号捕获STDOUT 和退出状态 例如:my $output = `/usr/bin/pdf2txt.py arg1 arg2 2>&1`; my $ret = $?;
my $output = `/usr/bin/pdf2txt.py arg1 arg2`;
【讨论】:
如果不需要脚本输出,但需要返回码,请使用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";
【讨论】:
@args。使用system $bin, @args; - 可以避免许多潜在的有害错误。
如果您想“实时”查看输出,而不是脚本运行完毕后,请在 python 之后添加 -u。示例:
my $ret = system("python -u pdf2txt.py arg1 arg2");
【讨论】: