Lua программирование - os.execute () не работает в Windows - PullRequest
1 голос
/ 15 февраля 2011

Я создаю функцию в чистом Lua, чтобы сканировать файлы из каталога и помещать их в другой файл.

Команда, которую я попробовал, была:

os.execute( "dir /B C:\\Users\\Fernando\\workspace\\Organizator2\\s1 > 
C:\\Users\\Fernando\\workspace\\Organizator2\\temp.txt" ) 

, но ... не работает!Я сделал много тестов с другими более простыми командами, такими как «запуск блокнота» или «mkdir C: \ test», и они тоже не работали!Хуже всего то, что я попробовал эти же команды непосредственно в командной строке, и там все правильно.

Я попытался использовать tooo io.popen (), но система вернула «недопустимую операцию» для любой команды.я прошел (даже пустую строку!).

вот весь код:

function ScanDirectory(source, str) 
    local str = str or "temp.txt" 
    os.execute("dir /B "..source.." > "..str) 
    directory = io.open(str,"r") 
    return directory 
end 

--  main script 

do 
    local source = "C:\\Users\\Fernando\\workspace\\Organizator2\\s1" 
    local directory  = ScanDirectory(source, "C:\\Users\\Fernando\ 
\workspace\\Organizator2\\temp.txt") 
end 

Я использую windows 7 и Luaforwindows, 5.1, и LuaEclipse

Кто-нибудь видел подобную проблему?

Ответы [ 4 ]

1 голос
/ 15 февраля 2011

Большинство перечисленных вами команд являются командами оболочки, которые работают только в командной строке. Попробуйте запустить cmd.exe напрямую, чтобы увидеть, получаете ли вы приглашение, и если это так, вы можете попробовать передать команды cmd.exe через параметр / c. Вы также можете попробовать блокнот без начала, чтобы проверить, работает ли он.

1 голос
/ 16 февраля 2011
os.execute('cmd.exe /c dir /B C:\\> C:\\test.txt')

Это работает. Использование команд в стиле Linux в win вообще плохая идея =)

1 голос
/ 15 февраля 2011

Попробуйте использовать следующий синтаксис:

os.execute [["dir /B C:\Users\Fernando\workspace\Organizator2\s1 > C:\Users\Fernando\workspace\Organizator2\temp.txt"]]

Обратите внимание, что в этом случае обратная косая черта (\) не является специальным символом.(Lua использует cstrings внутри, иногда это приводит к каким-то странным и удивительным результатам: P)

0 голосов
/ 19 февраля 2011

Я только что проверил ваш код на моем компьютере, и он работает правильно (с моими каталогами, конечно). Возможно, вы не получите ожидаемый результат, потому что ваша строка directory обрывается символом перевода строки, в результате чего:

dir /B C:\Users\Fernando\workspace\Organizator2\s1 > C:\Users\Fernando\
workspace\Organizator2\temp.txt

Правильно должно быть:

dir /B C:\Users\Fernando\workspace\Organizator2\s1 > C:\Users\Fernando\workspace\Organizator2\temp.txt

Пожалуйста, попробуйте изменить конец do на:

local source = "C:\\Users\\Fernando\\workspace\\Organizator2\\s1" 
local directory  = ScanDirectory(source, "C:\\Users\\Fernando\\workspace\\Organizator2\\temp.txt") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...