6

I'm having problems reading text files into my python programs.

import sys

words = sys.stdin.readlines()

I'm reading the file in through stdin but when I try to execute the program I'm getting this error.

PS> python evil_61.py < evilwords.txt

At line:1 char:19
+ python evil_61.py < evilwords.txt
+                   ~

The '<' operator is reserved for future use.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

Could someone tell me how to run these kinds of programs as it is essential for my course and I'd rather use Windows than Linux.

0

2 Answers 2

8

Since < for input redirection is not supported in PowerShell, use Get-Content in a pipeline instead:

Get-Content evilwords.txt | python evil_61.py 

Note: Adding the -Raw switch - which reads a file as a single, multi-line string - would speed things up in principle (at the expense of increased memory consumption), but PowerShell invariably appends a newline to data piped to external programs, as of PowerShell 7.2 (see this answer), so the target program will typically see an extra, empty line at the end. Get-Content's default behavior of line-by-line streaming avoids that.

Beware character-encoding issues:

  • Get-Content, in the absence of an -Encoding argument, assumes the following encoding:

    • Windows PowerShell (the built-into-Windows edition whose latest and final version is 5.1): the active ANSI code page, which is implied by the active legacy system locale (language for non-Unicode programs).
    • PowerShell (Core) 7+: (BOM-less) UTF-8
  • On passing the lines through the pipeline, they are (re-)encoded based on the encoding stored in the $OutputEncoding preference variable, which defaults to:

    • Windows PowerShell: ASCII(!)
    • PowerShell (Core) 7+: (BOM-less) UTF-8

As you can see, only PowerShell (Core) 7+ exhibits consistent behavior, though, unfortunately, as of PowerShell Core 7.2.0-preview.9, this doesn't yet extend to capturing output from external programs, because the encoding that controls the interpretation of received data, stored in [Console]::OutputEncoding], still defaults to the system's active OEM code page - see GitHub issue #7233.

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

Comments

0

Consider passing the text file as an argument at command line for Python script to use. All command line arguments (including file name) come stored in the sys.argv list:

Python Script (in evil_61.py)

import sys

txtfile = sys.argv[1]
with open(txtfile) as f:
    content = f.readlines()

PowerShell Command

PS> python evil_61.py evilwords.txt

Comments

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.