3

I'm trying to run a Perl script from Python. I know that if run the Perl script in terminal and I want the output of the Perl script to be written a file I need to add > results.txt after perl myCode.pl. This works fine in the terminal, but when I try to do this in Python it doesn't work.

This the code:

import shlex
import subprocess

args_str = "perl myCode.pl > results.txt"
args = shlex.split(args_str)
subprocess.call(args)

Despite the > results.txt it does not output to that file but it does output to the command line.

0

1 Answer 1

9
subprocess.call("perl myCode.pl >results.txt", shell=True)

or

subprocess.call(["sh", "-c", "perl myCode.pl >results.txt"])

or

with open('results.txt', 'wb', 0) as file:
    subprocess.call(["perl", "myCode.pl"], stdout=file)

The first two invoke a shell to execute the shell command perl myCode.pl > results.txt. The last one executes perl directly by having call do the redirection itself. This is the more reliable solution.

Sign up to request clarification or add additional context in comments.

3 Comments

(This is my first Python code. Feel free to improve.)
subprocess.call("perl myCode.pl >results.txt", shell=True) worked for me, Thanks!
They all work. The third avoids having spawing a shell to spawn your program.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.