当包装在.bat fi中时,使raw_input()同时使用管道和参数

2024-04-29 20:26:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为python代码编写一个.bat包装器,它可以处理参数和管道输入。参数不是问题,但我一旦尝试管道输入,就失去了使用原始输入查询用户和/或引起eoferor的能力。下面是一个例子,我们称之为测试.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 """

Tags: or代码用户answer参数if管道mode
1条回答
网友
1楼 · 发布于 2024-04-29 20:26:56

在Windows上,可以使用open('CON')创建一个文件对象,用于从控制台读取数据(即绕过标准输入重定向)。在

相关问题 更多 >