为什么perl在渲染和文件创建完成之前执行backtick命令?

vwhgwdsa  于 2023-06-23  发布在  Perl
关注(0)|答案(1)|浏览(125)

我试图渲染一个文件使用一个实用程序模板在梅森模板(使用一个古老的CMS Bricolage)。这可能并不重要。
$m->scomp应该最终得到一个很好的json文件,然后我手动创建,打印并关闭:

my  $article_body = $m->scomp('/util/render_apple_story.mc');
 open my $fh, '>', $articlerootjson;
  print {$fh} $article_body . "\n";
    close $fh;

然后,我尝试执行一个进程(用Python)检测到该文件并将其发送给Apple

$output = `PYTHONIOENCODING=UTF-8 /var/home/tyee/PyAppleAPI/create_article.py https://news-api.apple.com $channel $key $secret $articleroot`; 
 print "return is $output \n";

但每次我第一次执行模板时,它都无法创建文件。
然而,它在反引号中运行命令,返回的结果是没有json文件。
因此,perl程序在$m->scomp或file open/close命令仍在运行时继续执行,然后在文件创建之前退出。
第二次,如果我重新呈现模板(重新运行perl),文件将被创建。
有什么方法可以运行回勾部分,只有当$m->scomp和文件打开+关闭已经完成?

z31licg0

z31licg01#

结果发现,故事uri所在的目录结构还不存在。我尝试了各种强制预览输出通道都无济于事。
因此,在查看了创建路径的整个目录结构的快捷方式后,我不得不执行以下不优雅的操作:

my $year = $story->get_cover_date("%Y");
my $month = $story->get_cover_date("%m");
my $day = $story->get_cover_date("%d");
my $slug = $story->get_slug;

mkdir "/var/home/hidden/PyAppleAPI/root${caturi}${year}";
mkdir "/var/home/hidden/PyAppleAPI/root${caturi}${year}/${month}";
mkdir "/var/home/hidden/PyAppleAPI/root${caturi}${year}/${month}/${day}";
mkdir "/var/home/hidden/PyAppleAPI/root${caturi}${year}/${month}/${day}/${slug}";

my $status = `touch $articlerootjson`;

然后它让我打开文件。用错误报告打开文件会对我有帮助,我不知何故不认为这是失败的步骤,所以我忽略了它。

相关问题