我想在python代码周围写一个.bat包装器,它可以处理参数和管道输入。参数没有问题,但是一旦我尝试管道输入,我就失去了使用raw_input查询用户和/或导致EOFError的能力。以下是一个示例,我们称之为 test.bat 。我可以改变下面的脚本让它处理管道输入和参数输入吗?
[编辑]感谢Harry Johnston提出的建议,请参阅下面的代码,了解使用管道和参数获取用户输入的坚如磐石的方法!
@echo off
rem = """
setlocal enableextensions
set PYTHON="C:/Python27/python.exe"
%PYTHON% -x "%~f0" %*
goto endofPython """
import os, stat, sys
# This effectively replaces raw_input()
def workaround(message):
while True:
sys.stdout.write(message)
answer = ''
with open('CON') as console:
answer = console.readline().lower().strip()
if answer == 'y' or answer == 'yes':
return True
elif answer == 'n' or answer == 'no':
return False
mode = os.fstat(0).st_mode
if stat.S_ISFIFO(mode) or stat.S_ISREG(mode):
print
if workaround("Print STDIN? ([Y]es,[N]o)"):
print
print
for x in sys.stdin:
print 'STDIN: %s'%x.strip()
if sys.argv[1:]:
print
if workaround("Print ARGV? ([Y]es,[N]o)"):
print
for x in sys.argv[1:]:
print 'ARGV : %s'%x
rem = """
:endofPython """
答案 0 :(得分:2)
在Windows上,您可以使用open('CON')
创建一个文件对象,用于从控制台读取数据(即绕过标准输入重定向)。