在cmd中使用Julia对象

5
我目前正在使用Julia编程,需要在命令提示符下运行一个.exe程序。我们将该程序命名为"x.exe"。我决定在我的代码中添加以下行以使Julia在代码内部执行该程序: run(pipeline('x.exe input.txt 5 500',stdout="output.txt")) 代码可以完美运行,但我必须手动插入值"5"和"500",它们分别是input.txt文件中的行数和每行中的项数。它们还是存储在Julia中的Array的行数和列数。
代码是否存在一种方法可以直接读取这些数字?我尝试了 writedlm("size.txt", transpose([size(Array)[1],size(Array)[2]])," ") 然后再运行 run(pipeline('x.exe input.txt type size.txt',stdout="output.txt")) 但它不起作用...

你是说真的要使用Windows命令提示符[tag:cmd]吗? - aschipfl
是的 :-) 但我的问题已经解决了,谢谢! - coolsv
1个回答

2

You can use @sprintf, e.g. as follows:

julia> using Printf

julia> x = [[1,2,3], [4,5,6]]
2-element Array{Array{Int64,1},1}:
 [1, 2, 3]
 [4, 5, 6]

julia> a = @sprintf("%d", size(x)[1][1])
"2"

julia> b = @sprintf("%d", size(x[1])[1][1])
"3"

julia> run(pipeline(`x.exe input.txt $a $b`,stdout="output.txt"))

正如你所看到的,Julia使用与shell相同的方法将变量插入命令中(请参阅Julia手册上关于运行外部程序的部分)。


1
抱歉,@coolsv,我之前没有使用过pipeline(),不知道它需要在命令周围使用反引号而不是字符串。我已经更新了我的答案。 - Simon
2
我认为即使没有 @sprintf,插值也应该起作用,例如 x.exe input.txt $(size(x[1],1)) $(size(x[2],1))。请注意,如果您要插入表达式,则必须将它们包装在 () 中。 - Bogumił Kamiński
1
@coolsv:如果你在Linux环境下,仍然需要使用run()@spawn会以并行方式运行任务,因此它的工作方式略有不同。你可以在任何Julia环境中使用它。请参阅Parallel Computing获取更多信息。 - Simon
1
进程信号6是“Abort”(参见进程何时收到SIGABRT(信号6)?)。这让我想到你的程序Y可能会因为有错误而中止。你能否直接从shell中使用正确的数字替换ab,成功运行./Y input.txt a b - Simon
1
我终于找到错误了!input.txt文件的名称是错误的。我纠正了它,现在它可以工作了!无论如何,感谢您的帮助,因为这对我在Linux上进行操作很有用 :-) - coolsv
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接