Подпроцесс и жестко закодированные каталоги работают нормально. - PullRequest
1 голос
/ 08 апреля 2011

Итак, я столкнулся с проблемой и теперь уверен, что я делаю неправильно.Я использую Python 2.4 и модуль подпроцесса.Это интегрировано с моим сайтом Django.У меня есть форма, которая запрашивает некоторый пользовательский ввод, она помещает его в файл, затем запускает скрипт с каталогом, в котором находятся файлы.

Если я жестко закодирую каталог в строке, он будет работать нормально, и из поставить wlst скрипт, если я его не сделаю, он не будет работать, а просто подключится и думаю, что это сделано.

Все еще застрял без информации.На почему.Скрипт нормально работает как из обычной командной строки, так и из обычного кода на python.Единственное, что я могу сказать, это переменные.

Код:

if form.is_valid():
                        env = form.cleaned_data['env']
                        user = form.cleaned_data['user']
                        group = form.cleaned_data['group']
                        role = form.cleaned_data['role']

                        id = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(6))

                        root = "/opt/tools/Mapper/output/webui/%s" % (id)

                        if not os.path.exists(root):
                                os.makedirs(root)

                        output = open(root+"/mapping.out", 'w')

                        if (user):
                                user_stg = "User:"+user+":"
                                password = User.objects.filter(user__contains=user).values('password')

                                password_f = open(root+"/passwords.out", 'w')

                                password_out = "%s:%s" % (user, password[0]['password'].encode('ascii'))

                                password_f.write(password_out)
                        if (group):
                                grp_stg = "GroupName:"+group+":"
                        if(role):
                                role_stg = "RoleName:"+role

                        out_stg = user_stg+grp_stg+role_stg

                        output.write(out_stg+"\n")

                        command = "/opt/tools/Mapper/bin/wlst /opt/tools/Mapper/bin/creator -e ldap.dev -s pacdcespopsa1:7001 -o /opt/tools/Mapper/output/webui/JBHSMN"

                        args = shlex.split(command)

                        print args

                        resp = HttpResponse(command_output(args));

def command_output(args):
    import subprocess
    return subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0]

Единственное различие между этим кодом и кодом, управляемым varable, заключается в том, что у меня есть для

command = "/opt/tools/Mapper/bin/wlst /opt/tools/Mapper/bin/creator -e ldap.dev -s pacdcespopsa1:7001 -o %s" % (root)
...