0

我想替换这个 BASH 表达式:

expr $COUNT + 1 > $COUNT_FILE

与 Python 中的等价物。我想出了这个:

subprocess.call("expr " + str(int(COUNT)+1) + " > " + COUNT_FILE, shell=True)

或者(也许更好一点):

 subprocess.call("echo " + str(int(COUNT)+1) + " > " + COUNT_FILE, shell=True)

有一个更好的方法吗?

根据您的输入:

def out_to_file(out_string, file_name, append='w'):
    with open(file_name, append) as f:
        f.write(out_string+'\n')
4

4 回答 4

5
with open(COUNT_FILE, 'w') as f:
    f.write(str(int(COUNT)+1)+'\n')
于 2013-08-22T20:21:30.080 回答
3

使用python写文件,而不是shell。您的代码没有替换任何 bash 表达式,您仍在 bash 中运行它...

而是尝试:

with open(COUNT_FILE, 'w') as f:
    f.write(str(int(COUNT) + 1) + "\n")

    # or python 2:
    # print >> f, int(COUNT) + 1

    # python 3
    # print(int(COUNT) + 1, file=f)

with退出块后文件将自动关闭。

于 2013-08-22T20:21:41.703 回答
2

不要使用 shell,使用 Python 的 I/O 函数直接写入文件:

with open(count_file, 'w') as f:
    f.write(str(count + 1) + '\n')

with语句负责事后关闭文件,因此更安全。

于 2013-08-22T20:21:53.310 回答
2

如果您需要expr计算结果,Python 指令将是:

import subprocess
count_file= ...   #  It needs to be set somewhere in the Python program
count= ...        #  Idem
subprocess.call(["expr",str(count),"+","1"], stdout=open(count_file,"wb") )
f.close()

如果你更喜欢用 Python 做数学,你可以使用

with open(count_file, 'w') as f:
    f.write(str(count+1)+'\n')

如果要检索环境变量:

import os
count_file= os.environ['COUNT_FILE']
count= int( os.environ['COUNT'] )

如果你想让它更通用,你也可以使用

count= ...        #  It needs to be set somewhere in the Python program
print( count + 1 )

并在调用 Python 时执行重定向:

$ myIncrementer.py >$COUNT_FILE
于 2013-08-22T20:23:09.913 回答