【问题标题】:How to execute a python script and write output to txt file?如何执行 python 脚本并将输出写入 txt 文件?
【发布时间】:2014-03-24 16:04:45
【问题描述】:

我正在执行一个 .py 文件,它会输出一个给定的字符串。该命令运行良好

执行文件('file.py')

但我希望将输出(除了显示在 shell 中)写入文本文件。

我试过了,但它不起作用:(

execfile ('file.py') > ('output.txt')

我得到的只有这个:

tugsjs6555

错误

我猜“False”是指输出文件没有被成功写入:(

感谢您的帮助

【问题讨论】:

  • 你真的想在当前范围内运行file.py,并访问你定义的所有变量,还是你想在自己独立的环境中运行它? execfile 很可能不是您应该使用的工具。

标签: python output


【解决方案1】:

您所做的是根据字符串 'output.txt' 检查 execfile('file.py') 的输出

你可以用子进程做你想做的事

#!/usr/bin/env python
import subprocess
with open("output.txt", "w+") as output:
    subprocess.call(["python", "./script.py"], stdout=output);

【讨论】:

  • 感谢 raser,但我想如何在 >>> 中运行它?我试着一次写一行,但是当我尝试第二行时,我得到了一个语法错误:(你能帮我把它减掉吗;)干杯!
  • 您是在使用 IDLE 还是在命令行中?通常你可以选择所有的行并以任何一种方式粘贴它
  • 我是python的新手,刚刚在我的win8上安装了python27。所以我正在使用cmd。我已经尝试将上面的代码 c/p 到一个新文件中,将其保存为 run.py 并尝试了 execfile ('run.py'),但仍然没有工作:(
  • 您是否将“./script.py”更改为“./file.py”(或任何您命名为要运行的文件)?
  • with 语句中缺少冒号,open 调用中缺少写入模式。
【解决方案2】:

这也可以,因为在执行“file.py”之前将标准输出定向到文件 output.txt:

import sys

orig = sys.stdout
with open("output.txt", "wb") as f:
    sys.stdout = f
    try:
        execfile("file.py", {})
    finally:
        sys.stdout = orig

或者,在子进程中执行脚本:

import subprocess

with open("output.txt", "wb") as f:
    subprocess.check_call(["python", "file.py"], stdout=f)

如果你想写入一个目录,假设你想硬编码目录路径:

import sys
import os.path

orig = sys.stdout
with open(os.path.join("dir", "output.txt"), "wb") as f:
    sys.stdout = f
    try:
        execfile("file.py", {})
    finally:
        sys.stdout = orig

【讨论】:

  • 除非file.py 尝试使用名为orig 的变量做某事,或者以其他方式干扰您的代码。
  • 没错,我已经编辑了我的代码以传递一个单独的 globals 字典。
  • 宾果游戏!你明白了:)谢谢一百万!现在有没有办法选择一个不同的目录来写出输出文件?干杯!
  • 如果你没有注意到它,那么使用 check_call 有什么意义呢?
  • @raser 最好有一个致命的异常,而不是吞下一个最终的错误。
【解决方案3】:

运行脚本并将输出输出到文本文件的最简单方法是在终端中键入以下内容:

PCname:~/Path/WorkFolderName$python scriptname.py>output.txt

*在执行命令之前,请确保您已经在工作文件夹中创建了 output.txt。

【讨论】:

    【解决方案4】:

    如果您在 Windows 命令提示符下运行该文件:

    python filename.py >> textfile.txt
    

    输出将被重定向到存储 filename.py 文件的同一文件夹中的 textfile.txt。

    以上内容仅适用于您在 cmd 上显示结果并且您希望查看整个结果而不被截断的情况。

    【讨论】:

      【解决方案5】:

      改用这个:

      text_file = open('output.txt', 'w')
      text_file.write('my string i want to put in file')
      text_file.close()
      

      将它放入您的主文件并继续运行它。将第二行中的字符串替换为您的字符串或包含您要输出的字符串的变量。如果您还有其他问题,请在下方留言。

      【讨论】:

      • 谢谢 Rem,这行得通,但它只会写出你写的任何字符串,而不是“我想放入文件中的字符串”。真正的脚本file.py中有什么,它返回我想要写入output.txt文件的实际字符串:(我认为如果我们将file.py的输出分配给一个变量,然后使用那个var相反......知道该怎么做吗? THX
      【解决方案6】:
      file_open = open("test1.txt", "r")
      file_output = open("output.txt", "w")
      
      for line in file_open:
          print ("%s"%(line), file=file_output)
      
      file_open.close()
      file_output.close()
      

      【讨论】:

      • @user2957951:请始终将错误告知此人,以便他能以更高的机会帮助您。
      【解决方案7】:

      在上述帖子和其他一些链接中使用 Remolten 的一些提示,我写了以下内容:

      from os import listdir
      from os.path import isfile, join
      folderpath = "/Users/nupadhy/Downloads"
      filenames = [A for A in listdir(folderpath) if isfile(join(folderpath,A))]
      newlistfiles = ("\n".join(filenames))
      OuttxtFile = open('listallfiles.txt', 'w')
      OuttxtFile.write(newlistfiles)
      OuttxtFile.close()
      

      上面的代码是列出我下载文件夹中的所有文件。它将输出保存到输出到 listallfiles.txt。如果该文件不存在,它将在每次运行此代码时创建并替换为新文件。您唯一需要注意的是,它将在保存 py 脚本的文件夹中创建输出文件。看看你是怎么做的,希望对你有帮助。

      【讨论】:

        【解决方案8】:

        您也可以通过 cmd 转到保存 python 脚本的文件夹的路径,然后执行 name.py > filename.txt 它在 Windows 10 上对我有用

        【讨论】:

        • 如果您能提供一些可验证的代码来支持答案,那就太好了。
        • D:\Python\Python3> scrap.py > results.txt
        猜你喜欢
        • 1970-01-01
        • 2014-09-02
        • 2016-08-17
        • 2015-01-21
        • 1970-01-01
        • 1970-01-01
        • 2017-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多