【问题标题】:How to write the output to a file, while showing the inputs to the console?如何将输出写入文件,同时将输入显示到控制台?
【发布时间】:2015-12-10 11:36:35
【问题描述】:

如果我想将 python 脚本或其他程序的结果打印到文件中,我只需在控制台 python myscript.py>output.txt 上执行类似的操作,但现在 myscript 里面有一个输入,怎么能我把这个带到控制台?例如,我有脚本来检查给定的年份是否是闰年:

def isLeapYear(year):
    return (year%4==0 and (year%400==0 or year%100!=0))

if __name__ == "__main__":
    y=input("Test if your year is a leap year: ")
    try:
        out=str(y)+" is"
        if not isLeapYear(int(y)):
              out+=" not";
        print(out+" a leap year")
    except ValueError:
        print("invaild input")

当我现在编写上面的命令时,我的输出文件中的结果是这样的(而我可以在控制台中输入年份):

测试你的年份是否是闰年:2000 年是闰年

但我只是想要

2000 年是闰年

在那里并拥有

测试你的年份是否是闰年:

显示在控制台上。有没有聪明的方法来做到这一点?我可以以某种方式强制将某些内容打印到控制台吗?有一个通用的方法吗?我的意思是我在使用 C 或 Java 程序时可能会遇到同样的问题。

【问题讨论】:

  • 最好在脚本本身中实现写入文件。您可以将输出文件名作为参数从命令行传递。
  • 我想了这么多。我是否可以至少以这样一种方式创建我的脚本,即如果有人试图以这种方式生成文件输出,则会显示错误消息,而脚本永远不会运行?
  • 您不需要将输入转换为 str,因为每个输入都是字符串,除非您对其进行修改,因为输出不包括“测试您的年份是否为闰年:”根本不将答案添加到您的“out”变量中。在语句 out+="is" 中,您将“is”添加到您的输入中
  • @user3284214 你无法知道输出一旦输出会发生什么。如果有人决定将其重定向到一个文件,它将转到一个文件。他们还可能将其通过管道传输到另一个应用程序,或者将其打包在一个盒子中并发送到外太空。你不应该为此烦恼。

标签: python file console output


【解决方案1】:

根据上面的cmets:

*) 你应该用你的 python 脚本来处理文件,因为我们在 Python 中它只是几行代码。

*) 关于你的问题,如果有人仍然以应该重定向输出的方式调用脚本会发生什么,你可以在 python 中检查 stdin 和 stdout 是否相同,如果不是根据@987654321 重定向输出@

为了安全起见,请再点击这里的示例代码,test.py 是一个执行此检查的两行代码:

    $ cat test.py
    import os
    print os.fstat(0) == os.fstat(1)
    $ python test.py
    True
    $ python test.py > f
    $ cat f
    False
    $

希望对您有所帮助。

干杯, 彼得

【讨论】:

    【解决方案2】:

    如果您想保持终端打印,我只需编辑脚本以编写输出。

    outfile = open("leap-output.txt", "a+")
    

    然后将文字添加到脚本中。

    outfile.write("%s a leap year") %(out)
    outfile.write("\n")
    outfile.close()
    

    使用 > 重定向输出是一个 bash 函数,您无法控制它。

    正如 zvone 所说,如果您强制用户在脚本中提供参数,您将获得一些控制权。

    userinput = sys.argv[1]

    然后你可以通过输入python myscript.py example-output-file.txt来开始你的脚本

    如果用户没有给出输出文件的参数,Python 将在此处崩溃。

    【讨论】:

      猜你喜欢
      • 2020-04-10
      • 2012-12-18
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多