当前位置: 首页 > 知识库问答 >
问题:

如何通过python子进程调用执行perl脚本?

蓬长恨
2023-03-14

使用子流程。调用在python中,我试图运行一个perl脚本,它在远程机器上运行一个代码来获取一些信息。

我在机器A上有两个脚本—python和perl。python脚本使用子流程调用perl脚本。通过在循环中向其传递IP地址来调用方法。两个脚本都运行得很好。

但是,perl脚本是按串行顺序执行的(一个接一个的IP)。

# python code

def foo():
   print()
   IPs = ["198.168.1.2","198.168.3.4"]
   for ip in IPs:
       proc = call("perl script.pl '%s'" %ip, shell=True, stdin=PIPE)

foo()
   # perl script
   #!/usr/bin/html" target="_blank">perl

   sub bar($)
   {
      //Code that ssh's to a remote-machine and gets required information
   }

   print(bar($ARGV[0]),"\n");  
   print("Sleeping for 15 sec\n");
   sleep(15);
   print("Done\n");

实际行为-

  • python脚本通过传递'198.168来运行perl脚本。1.2'
  • perl脚本执行代码并Hibernate15秒
  • python脚本然后通过传递“”198.168来运行perl脚本。3.4'
  • perl脚本执行代码并Hibernate15秒

因此,为这两个IP运行perl脚本总共需要30秒。

预期行为-

  • python脚本通过传递198.168.1.2来运行perl脚本
  • 而不是等待perl脚本完成第一个IP,它执行相同的perl脚本与'198.168.3.4'。

因此,为两个IP执行perl脚本所花费的时间大致相同。

共有1个答案

夔高寒
2023-03-14

这可以通过子流程实现。Popen。这将在不阻塞主线程的情况下运行进程。您的应用程序将如下所示:

def foo():
    print()
    IPs = ["198.168.1.2","198.168.3.4"]
    procs = []
    for ip in IPs:
        proc = subproces.Popen(["perl", "script.pl", ip], shell=True, stdin=PIPE)
        procs.append(proc)

    # wait for all the processes to finish
    for proc in procs:
        proc.wait()

foo()
 类似资料:
  • 问题内容: 我尝试执行以下操作(我的jar和python文件都在同一目录中): 和 无论是工作过。因此,我当时以为应该改用Jython,但我认为必须有一种更简单的方法来通过python执行jar文件。 你知道我可能做错了什么吗?或者,是否还有其他网站可以进一步研究我的问题? 问题答案: 我将以这种方式使用子流程: 但是,如果你有一个正确配置的,你应该能够直接运行jar,因为你写的。 那么,这正是您

  • 问题内容: 我正在尝试使用Linux crontab执行python脚本。我想每10分钟运行一次此脚本。 我找到了很多解决方案,但都无济于事。例如:在/etc/cron.d中编辑anacron或使用。我将此行放在文件的末尾,但它没有任何改变。我需要重启任何服务吗? 我必须编辑哪个文件来配置它? 提前致谢 这是脚本。 问题答案: 只需使用并按照此处的教程操作即可。 请参阅第3点,以获取有关如何指定频

  • 问题内容: 我有要从Python脚本调用的Perl脚本。我一直在寻找,并没有成功。我基本上是试图调用向Perl脚本发送1变量的方法,但是不需要Perl脚本的输出,因为它是一个自包含程序。 到目前为止,我想出的是: 只有刚刚开始的Python编程,所以我确定以上内容完全是胡说八道。任何帮助将非常感激。 问题答案: 如果您只想打开通往perl解释器的管道,那么您的方向正确。我认为您唯一缺少的是perl

  • 问题内容: 我阅读是一种选择,但这是最好的方法吗? 我需要该脚本的答案,因此在某些情况下,我必须阅读脚本的返回,尽管在其他情况下,我可能会从文本文件中读取该脚本的返回。 无论如何,是从Java调用Perl脚本的好方法吗?我应该注意,我正在开发Java Web应用程序,因此这里的安全性是一个问题。 问题答案: 您可以使用或使用Process API 。使用Process API,您可以获取脚本的输出

  • 我想从. dat文件恢复MSSQL数据库。 通过在Windows PowerShell上调用以下命令/语句或将其保存在一个文件夹中,我成功地做到了这一点。bat文件并运行文件本身: 但是,由于我需要在不同的数据库中多次重复此指令,因此我希望使用Python在循环中执行此操作。我尝试使用子流程模块复制上述指令。没有成功。 我的Python代码如下所示: 在Windows PowerShell上运行此

  • 问题内容: 我需要从我的Python脚本执行该脚本。 可能吗?该脚本会生成一些输出,并写入一些文件。如何访问这些文件?我尝试了子流程调用功能,但没有成功。 应用程序“ bar”还引用了一些库,除了输出外,它还创建了文件“ bar.xml”。我如何访问这些文件?只是通过使用open()? 谢谢, 编辑: Python运行时的错误仅是这一行。 问题答案: 要执行外部程序,请执行以下操作: 是的,假设您