1

我正在学习编码,我很新。我已经编写了一些脚本,并想将它们组合成一个脚本。我本质上是在尝试“看”。来自终端的命令,将其输入到文本文件中,然后打开该文本文件以开始操作其中的单词。

我尝试了许多不同的变化:

print "What file do you want to create? "
file_in = raw_input(">")
file_in = open(file_in, 'w')
new_file = os.system("look .")
file_in.write(new_file)

这导致:

Traceback (most recent call last):
File "hash.py", line 13, in <module>
file_in.write(new_file)
TypeError: expected a character buffer object

在所有单词都打印到屏幕上之后。

我也试过这个:

print "What file do you want to create? "
file_in = raw_input(">")
new_file = os.system("look . > "+file_in+".txt")

##This is attempting to open the file to make each word capital in the list, the list is     made at this point
capital_words=open(new_file, 'w')

但这会导致:

capital_words = open(new_file, 'w')
TypeError: coercing to Unicode: need string or buffer, int found

我已经尝试将 capital_words 转换为 str。但它根本不会让我这样做。我可以使用脚本制作列表,并且可以打开现有列表并使用单独的脚本将每个单词大写(这是我打算在这里做的),但是当我组合它们时会出现这个问题。

任何帮助表示赞赏。

(我知道这没有任何实际应用,我只是想学习编程的基础知识)

4

1 回答 1

1

os.system调用不会返回您调用的程序的输出。它返回其退出代码。要捕获程序的输出,您需要使用该subprocess模块,使用 . 调用Popen并捕获输出subprocess.PIPE

就是这样:

import subprocess
# Create a Popen object that captures the output.
p=subprocess.Popen(['look','data'],stdout=subprocess.PIPE)
# Call 'look data' and wait for it to finish.
p.wait()
# Now read the output.
print p.stdout.read()

这将产生:

data
database
database's
databases

要将输出转储到文件中,而不是print p.stdout.read()您应该执行以下操作:

import subprocess
with open('foobar.txt', 'w') as f:
  p=subprocess.Popen(['look','data'], stdout=f)
  p.wait()
于 2013-09-28T09:19:42.340 回答