【问题标题】:Perl Script not saving C outfilePerl 脚本不保存 C 输出文件
【发布时间】:2012-06-13 15:37:37
【问题描述】:

我一直在向现有项目添加一个插件,该插件与 perl 脚本绑定在一起。我正在尝试将我的 C 程序添加到 perl 脚本中以生成输出文件,但输出是垃圾或丢失。

我的可执行文件名为 Interpolate,当它与 perl 脚本位于同一文件夹时,它工作得很好

./Interpolate inv.tracking_log

是命令的运行方式。它应该生成一个名为tmp.log 的中间文件和一个名为out.txt 的最终文件。当我在目录中运行它时,它运行良好,两个文件都应该是。

然后我在 perl 脚本中添加了一个系统调用(我几乎(如果)知道 perl):

print("./Interpolate $inVideoFile");      //prints like the command (just a test)
my $interCall = system("./Interpolate $inVideoFile");

从 perl 脚本中运行它时,tmp.log 文件大部分是垃圾,而 out.txt 完全丢失了。我确实意识到 out 很可能会丢失,因为它依赖于 tmp.log 文件。是否有我在某处遗漏的 perl 'gotchya'?

【问题讨论】:

  • 不确定但尝试使用绝对路径运行。
  • 尝试 oneliner: perl -e "system("./Interpolate inv.tracking_log");'并检查结果。如果不好,则问题有更深层次的根源,如果正常,则问题出在 perl 程序的其余部分。
  • 效果很好。如果我有点想不通,我会试着找到今天写剧本的人。谢谢
  • 尝试用逗号分隔命令和参数:my $intercall = system("./Interpolate", $inVideoFile");
  • 你从哪里调用 perl 脚本?确保您的工作目录相同。尝试在您的 system 呼叫上方添加 print `cmd` 以了解您的位置。

标签: c perl


【解决方案1】:
system("./Interpolate $inVideoFile");

应该是

system("./Interpolate", $inVideoFile);

如果修复后仍有问题,$inVideoFile 未包含应有的内容,或者您​​的 C 程序中存在错误。 (system调用的返回值是多少?)

【讨论】:

  • 只是想知道为什么会这样:perl -e 'system("ls -1 /etc/ | sort -r");'工作正常,例如,当命令名称和参数 not 作为列表输入时。
  • 系统有三种语法。 1) 采用 shell 命令,2) 采用程序名称后跟 1 个或多个参数,3) 采用程序名称和零个或多个参数。您是否声称 $inVideoFile 命名错误并且实际上包含一个评估为文件名的 shell 文字?如果是这样,那么请忽略我的建议。如果$inVideoFile 包含一个文件名,那么你有一个错误。
猜你喜欢
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
相关资源
最近更新 更多