How do I redirect input and output with PyCharm li

2019-01-18 19:36发布

问题:

With the command line if I am running a python file I can enter:

python filename.py < filename.in > filename.out

Is there a way to mimic this behavior in PyCharm?

回答1:

(added in Pycharm 5)

In the Edit Configurations screen under Logs tab check the option: Save console output to file and provide a FULL PATH to the outputfile. thats it - works like magic



回答2:

As for the input, you can provide space separated input parameters in Script parameters field under Run->Edit Configurations. There's no direct way in pyCharm to redirect the output to a file unless you are using some wrapper class whose sole job is to write the wrapped module's output to a file.



回答3:

In PyCharm 5 (or even previous versions), you can do this by modifying the script parameters in Edit Configurations window. In that box, write

< filename.in

> filename.out

on separate lines



回答4:

Since I couldn't put any loading code in the python file, the solution for me was to:

  1. Install BashSupport plugin
  2. Create file launcher.sh with content:

    python filename.py < filename.in > filename.out

  3. In PyCharm create bash configuration: Run -> Edit Configurations -> + Bash and put launcher.sh as Script name



回答5:

Redirect input file to stdin

You can load content to stdin by using StringIO

import StringIO
sys.stdin = StringIO.StringIO('your input')

So if you want redirect input from file, you can read data from file and load it to stdin

import StringIO   
input = "".join(open("input_file", "r").readlines())
sys.stdin = StringIO.StringIO(input)

In case you want to take filename as first system argument

import StringIO   
filename = sys.argv[1]
input = "".join(open("input_file", "r").readlines())
sys.stdin = StringIO.StringIO(input)

Screenshots:

Main Program

Debug Configruration

Redirect stdout to output file

Similar idea as below sample code

import sys
sys.stdout = open(outputFile, mode='w', buffering=0)
#skip 'buffering' if you don't want the output to be flushed right away after written


回答6:

I'm not sure why this was not accepted / working , but in PyCharm 2017 the following approach works:

In the Run/Debug Configuration window , open the Script Parameters dialog and enter your input and/or output files on separate lines like this ( with quotes ):

< "input01.txt"
> "output01.txt"

Notice that I have >> here , this appends the output to output01.txt so that I have it all over multiple runs .

I don't see why this approach wouldn't work with older versions of PyCharm as it executes the following line using this configuration:

Also this approach works with a remote interpreter on a Vagrant instance , which is why that command is using ssh .