我有一个运行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:
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的帮助!
R'relaimpo'软件包的Python端口 - python我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。
Python sqlite3数据库已锁定 - python我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…
Python:如何根据另一列元素明智地查找一列中的空单元格计数? - pythondf = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Jane', 'Alice','Bob', 'Alice'], 'income…
Python pytz时区函数返回的时区为9分钟 - python由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…
将字符串分配给numpy.zeros数组[重复] - pythonThis question already has answers here: Weird behaviour initializing a numpy array of string data (4个答案) …