Выполнить команды командной строки

Если кто-то все еще следит за этим, я думаю, что атрибуты 'is_staff' и 'is_active' должны быть сохранены True для успешного входа в систему ......

self.user = User.objects.create(username='testuser',password='pwd',is_active=1,is_staff=1)

538
задан Timo Salomäki 15 February 2019 в 21:14
поделиться

4 ответа

Это все, что вам нужно сделать для запуска команд оболочки из C #

string strCmdText;
strCmdText= "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
System.Diagnostics.Process.Start("CMD.exe",strCmdText);

РЕДАКТИРОВАТЬ:

Это скрыть окно cmd.

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
process.StartInfo = startInfo;
process.Start();

РЕДАКТИРОВАТЬ: 2

Важно то, что аргумент начинается с /C, иначе он не будет работать. Как Скотт Фергюсон сказал: «Выполняет команду, указанную в строке, а затем завершается».

830
ответ дан Kenan Tabinas 15 February 2019 в 21:14
поделиться

Хотя технически это не дает прямого ответа на поставленный вопрос, оно отвечает на вопрос о том, как сделать то, что хотел сделать оригинальный плакат: объединить файлы. Во всяком случае, этот пост поможет новичкам понять, о чем говорят Инстанс Хантер и Константин.

Это метод, который я использую для объединения файлов (в данном случае это jpg и zip). Обратите внимание, что я создаю буфер, который заполняется содержимым zip-файла (небольшими порциями, а не одной большой операцией чтения), и затем буфер записывается в конец jpg-файла до тех пор, пока конец zip-файла не станет достиг:

private void CombineFiles(string jpgFileName, string zipFileName)
{
    using (Stream original = new FileStream(jpgFileName, FileMode.Append))
    {
        using (Stream extra = new FileStream(zipFileName, FileMode.Open, FileAccess.Read))
        {
            var buffer = new byte[32 * 1024];

            int blockSize;
            while ((blockSize = extra.Read(buffer, 0, buffer.Length)) > 0)
            {
                original.Write(buffer, 0, blockSize);
            }
        }
    }
}
10
ответ дан CarllDev 15 February 2019 в 21:14
поделиться

Пробовал решение @RameshVel, но я не мог передать аргументы в своем консольном приложении. Если кто-то испытывает ту же проблему, вот решение:

using System.Diagnostics;

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();

cmd.StandardInput.WriteLine("echo Oscar");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());
98
ответ дан Ogglas 15 February 2019 в 21:14
поделиться

Да, есть (см. Ссылку в комментарии Мэтта Гамильтона), но было бы проще и лучше использовать классы ввода-вывода .NET. Вы можете использовать File.ReadAllBytes для чтения файлов, а затем File.WriteAllBytes для записи «встроенной» версии.

8
ответ дан 22 November 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: