Python subprocess.call()不适用于>>运算符

问题描述 投票:0回答:1

我正在尝试编写一个程序,该程序会自动为我设置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
subprocess
1个回答
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()
© www.soinside.com 2019 - 2024. All rights reserved.