让我以我的问题开头,说我已经阅读了许多关于SO以及网络搜索的不同文章,但找不到适合我实际情况的任何内容。
实际上,问题很简单。我有一个CGI脚本(Perl)在Web服务器上提供动态页面,并且当用户加载某个页面时,我想让CGI脚本调用.pl文件system()
来执行一些“整理”。它在Windows NT环境中运行。
用于测试目的的CGI脚本是test1.pl或test1.cgi,例如“ https://www.awebsite.com/test1.pl ”。
test1.pl(生成网页的CGI脚本)
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello user, this is a test page.";
system("start C:/path/to/script/test2.pl");
print "Page is fully loaded and housekeeping is being done, even though this page is now fully loaded";
test2.pl(正在执行“内务处理”的独立.pl文件,与test1.pl正在执行的操作异步)
#!/usr/bin/perl
#just a counter that takes a while to complete, to verify test2.pl is running
for ($x=0; $x <= 100000; $x++){print "$x ";}
好的,请记住这是用于测试操作,而不是功能。从命令行运行test1.pl时,它可以正常工作。
从浏览器运行test1.pl时,这会在服务器上不断提示“ openWith.exe”(在任务管理器中查看)。我的.pl文件是可执行文件,因此这与文件类型未知或不知道如何使用Perl命令行解释器一起运行无关。我无法弄清楚这里发生了什么,以及当通过Web界面调用时为什么它无法运行来自test1.pl的系统命令。
用户输入没有传递任何参数。test1.pl只需运行test2.pl来做一些内务处理,但是我不能让test1.pl在继续之前先等待test2.pl完成。因此,test2.pl应该由test1.pl启动并继续运行-同时,test1.pl已经完成其工作。我并不需要或想要捕捉test2.pl任何输出。
我希望我已经清楚地解释了这一点。即使实际代码会复杂得多,我也使用了简单的示例。在这一点上,它甚至没有运行这些简单的示例脚本,因此实际的功能代码此时并不重要。
谢谢任何能帮助我的人。顺便说一句,我尝试为test1.pl设置“完全控制”权限,但这无济于事。同样,此“ openwith.exe”确实让我在这里循环。
终于弄清楚了(像往常一样,我自己)。事实证明,施文(Schwern),您处在正确的轨道上。即使.pl文件关联是通过控制面板建立的,可以使用Perl命令行解释器打开,但Windows文件类型关联还是存在问题(我什至不完全了解)。我终于在这里找到了TRUE问题的答案:Perl未在Windows 10中运行
特别是这里的这一部分:
您必须在.pl文件扩展名和Perl运行时之间创建文件关联。在命令提示符下,键入以下内容。assoc .pl=PerlScript ftype PerlScript=c:\perl\bin\perl.exe %1 %*
我希望这可以帮助可能遇到相同问题的其他人。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句