Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I read a text file in python via PowerShell? Windows 10

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.

like image 204
Olan Buckeridge Avatar asked Oct 30 '22 07:10

Olan Buckeridge


1 Answers

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.

like image 164
mklement0 Avatar answered Nov 15 '22 03:11

mklement0