gpt4 book ai didi

python - Shell 命令仅在手动执行时有效,但不能从 Python 文件执行

转载 作者:太空宇宙 更新时间:2023-11-03 20:59:41 26 4
gpt4 key购买 nike

我有一个运行 Ubuntu 16.04 的 VPS,我正在使用 Python 来自动执行一些任务。我编写了一个简单的脚本,使用 newusers 一次创建多个用户命令。 newusers 读取包含用户数据的文件并根据该数据创建新用户。我首先在脚本中执行的操作是创建一个名为 users.txt 的文件,在其中放置所有用户数据。之后,我稍后在脚本中对该文件调用 newusers 以便实际创建用户。

我尝试使用 os 和 subprocess 模块来调用命令 sudo newusers users.txt,但是,两者都不起作用。但是,当我直接从命令行运行该命令时,该命令确实有效。

这里我尝试使用子进程执行命令:

create_users = subprocess.Popen(['sudo', 'newusers', 'users.txt'], shell=True)

这里我尝试使用操作系统:

os.system('sudo newusers users.txt')

我什至尝试创建一个外部文件,然后调用命令:

make_users = open('make_users.py', 'x')

make_users.write('#!/usr/bin/env python3\n\n\
import os\n\n\
os.system(\'sudo newusers users.txt\')')

os.system('python3 make_users.py')

This是整个代码的链接。

问题是,当我手动运行 sudo newusers users.txt 时(直接从命令行),该命令运行得很好。它唯一不起作用的时候是当我从 Python 脚本运行它时。

我在想,也许脚本需要成功退出才能运行 sudo newusers users.txt

我没有收到任何错误,事实上,子进程的输出是None。但是当我检查 /etc/passwd 时,没有创建用户。

当然,我可以简单地运行脚本(这将创建users.txt),然后直接从命令行运行sudo newusers users.txt,但我想了解问题是什么以及为什么我无法使用 Python 执行相同的命令。

PS:权限不是问题,因为我是 root。

如果有任何帮助,我将不胜感激!

最佳答案

发现问题了。当我创建 users.txt 文件时,我没有关闭它。正如视频中提到的:https://www.youtube.com/watch?v=iba-I4CrmyA&t=487s ,关闭文件将:“将文件描述符(资源)返回给操作系统”。这是一个愚蠢的错误,我不会再重蹈覆辙。我现在总是使用 with 语句。

感谢@Reductio 和@Davis Herring 的帮助!

关于python - Shell 命令仅在手动执行时有效,但不能从 Python 文件执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55785645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com