Python 为什么我会得到;OSError:[Errno 2]没有这样的文件或目录";运行此脚本时?

Python 为什么我会得到;OSError:[Errno 2]没有这样的文件或目录";运行此脚本时?,python,xlrd,Python,Xlrd,首先,这是我的代码: #!/usr/bin/python # -*- coding: utf-8 -*- import os from xlrd import open_workbook import subprocess import sys START_ROW = 0 col_name = 0 col_room = 2 col_phone = 3 col_usr_name = 4 col_password = 5 book = open_workbook('Names_mod.xls',

首先,这是我的代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
from xlrd import open_workbook
import subprocess
import sys

START_ROW = 0
col_name = 0
col_room = 2
col_phone = 3
col_usr_name = 4
col_password = 5

book = open_workbook('Names_mod.xls',formatting_info=True)
sheet = book.sheet_by_index(0)

for row_index in range(START_ROW, sheet.nrows): 
    username = sheet.cell(row_index, col_usr_name).value
    pwrd = sheet.cell(row_index, col_password).value
    name = sheet.cell(row_index, col_name).value
    room = sheet.cell(row_index, col_room).value
    room = ''.join(i for i in pwrd if i.isdigit())
    phone = sheet.cell(row_index, col_phone).value
    phone = ''.join(i for i in pwrd if i.isdigit())
    comment = name".", room".", phone"."
    if col_name != "":
        subprocess.call(['useradd -c', comment, username])
        subprocess.call(['passwd', username])
运行此脚本时,我得到以下错误代码:

Traceback (most recent call last):
File "./lab5uppgift2.py", line 30, in <module>
    subprocess.call(['useradd -c', comment, username])
File "/usr/local/lib/python2.7/subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
File "/usr/local/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
File "/usr/local/lib/python2.7/subprocess.py", line 1308, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
回溯(最近一次呼叫最后一次):
文件“/lab5uppgit2.py”,第30行,在
subprocess.call(['useradd-c',comment,username])
文件“/usr/local/lib/python2.7/subprocess.py”,第524行,在调用中
返回Popen(*popenargs,**kwargs)。等待()
文件“/usr/local/lib/python2.7/subprocess.py”,第711行,在__
错误读取,错误写入)
文件“/usr/local/lib/python2.7/subprocess.py”,第1308行,在执行子进程中
引发子对象异常
OSError:[Errno 2]没有这样的文件或目录
我正在尝试从excel文件添加具有密码和注释的用户。我不明白我做错了什么。有人能给我解释一下吗


谢谢

您应该将所有参数传递给
子流程。在列表的单独元素中调用
,然后重试

subprocess.call(['useradd', '-c', comment, 'username', '-p', 'password'])
我将您的密码
username
替换为
'password'
,因为
useradd
的“-p”参数必须用
crypt
加密。以下代码段将帮助您完成此操作:

import os
import crypt
import random

saltchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

def salt():
    return random.choice(saltchars) + random.choice(saltchars)

def encript_pwd(password):
    return crypt.crypt(password,salt())
如果希望密码等于用户名,请使用

subprocess.call(['useradd', '-c', comment, 'username', '-p', 
    encript_pwd(username)])

使用:subprocess.call(['useradd','-c',comment,username'-p',username])Get:Traceback(最近一次调用):File“/lab5uppgit2.py”,第29行,在subprocess.call(['useradd','-c',comment,username'-p',username])/usr/local lib/python2.7/subprocess.py行,在call return Popen(*Popen Popen Popen Popen中('popenargs,**kwargs,**wait())文件“/usr/local/lib/python2.7/subprocess.py”,第711行,在init errread,errwrite)文件“/usr/local/lib/python2.7/subprocess.py”,第1308行,在执行子进程引发子进程异常类型错误:execv()arg 2必须只包含stringsUsername is:username=sheet.cell(行索引,列名称).这个新问题的链接我真的不明白。是否应该是,即comment.encode('utf8')?顺便说一句,我已经更新了代码和错误消息。这不是一个好的做法,您应该保留原始问题,否则以后无法理解答案。我们(至少我)写它们不仅是为了解决当前的问题,也是为了进一步的参考。我建议您恢复原始问题并打开有关此问题的新问题,或者在第一个问题之后添加新问题。首先,这是什么?
comment=name.“,”房间“,”电话“
?其次-
useradd
不适用于普通用户;您是否以root用户身份运行脚本?如果没有,则需要将
sudo
作为
子流程中的参数之一传递。call
Yes,我以root用户身份运行它。我现在改变了评论。它更好吗?这不可能是您正在运行的代码,因为它永远不会执行。