Python subprocess.call()无法与>>运算符一起使用

时间:2018-07-26 01:25:17

标签: subprocess

我正在尝试编写一个自动为我设置python shell脚本的程序。代码如下:

#!/usr/bin/env python3

import click
import subprocess

@click.command()
@click.argument('name')

def foo(name):
    subprocess.call("cd ~/bin", shell=True)
    subprocess.call(["touch", name])
    subprocess.call(["echo", "'#!/usr/bin/env python3'", ">>", name])
    subprocess.call(["chmod", "+x", name])

if __name__ == '__main__':
    foo()

当它运行时,我得到的输出是:

'#!/usr/bin/env python3' >> foo

1 个答案:

答案 0 :(得分:0)

解决此问题的更好方法是使用内置的Python库创建文件,以便您可以更轻松地捕获异常。我为您做了一个简单的概述,但是您应该添加一些错误检查。

import click
import os
import stat

@click.command()
@click.argument('name')

def foo(name):
    file_to_create = os.path.expanduser("~/bin/") + name
    with open(file_to_create, 'w') as file:
        file.write("#!/usr/bin/env python3\n")
    file_stats = os.stat(file_to_create)
    os.chmod(file_to_create, file_stats.st_mode | stat.S_IEXEC) # equivalent of 'chmod +x'

if __name__ == '__main__':
    foo()