Call Perl script from Python

后端 未结 5 1845
名媛妹妹
名媛妹妹 2020-12-08 11:37

I\'ve got a Perl script that I want to invoke from a Python script. I\'ve been looking all over, and haven\'t been successful. I\'m basically trying to call the Perl scrip

相关标签:
5条回答
  • 2020-12-08 12:00

    If you just want to open a pipe to a perl interpreter, you're on the right track. The only thing I think you're missing is that the perl script itself is not an executable. So you need to do this:

    var = "/some/file/path/"
    pipe = subprocess.Popen(["perl", "./uireplace.pl", var], stdin=subprocess.PIPE)
    pipe.stdin.write(var)
    pipe.stdin.close()
    
    0 讨论(0)
  • 2020-12-08 12:00

    Just do:

    var = "/some/file/path/"
    pipe = subprocess.Popen(["perl", "uireplace.pl", var])
    
    0 讨论(0)
  • 2020-12-08 12:01

    I Hope this can help you. Do not know how to do that otherwise.

    0 讨论(0)
  • 2020-12-08 12:04

    Would you like to pass var as a parameter, on stdin or both? To pass it as a parameter, use

    subprocess.call(["./uireplace.pl", var])
    

    To pipe it to stdin, use

    pipe = subprocess.Popen("./uireplace.pl", stdin=subprocess.PIPE)
    pipe.communicate(var)
    

    Both code snippets require uireplace.pl to be executable. If it is not, you can use

    pipe = subprocess.Popen(["perl", "./uireplace.pl"], stdin=subprocess.PIPE)
    pipe.communicate(var)
    
    0 讨论(0)
  • 2020-12-08 12:08

    You could try the subprocess.call() method. It won't return output from the command you're invoking, but rather the return code to indicate if the execution was successful.

    var = "/some/file/path"
    retcode = subprocess.call(["./uireplace.pl", var])
    if retcode == 0:
        print("Passed!")
    else:
        print("Failed!")
    

    Make sure you're Perl script is executable. Otherwise, you can include the Perl interpreter in your command (something like this):

    subprocess.call(["/usr/bin/perl", "./uireplace.pl", var])
    
    0 讨论(0)
提交回复
热议问题