这是一个经典问题,但我找不到简单的解决方案.
我有一个输入文件,如:
1 3 9 13 23 25 34 36 38 40 52 54 59
2 3 9 14 23 26 34 36 39 40 52 55 59 63 67 76 85 86 90 93 99 108 114
2 4 9 15 23 27 34 36 63 67 76 85 86 90 93 99 108 115
1 25 34 36 38 41 52 54 59 63 67 76 85 86 90 93 98 107 113
2 3 9 16 24 …Run Code Online (Sandbox Code Playgroud) 我试图bp_genbank2gff3.pl从另一个获取genbank作为其参数的perl脚本运行(bioperl包).
这不起作用(不生成输出文件):
my $command = "bp_genbank2gff3.pl -y -o /tmp $ARGV[0]";
open( my $command_out, "-|", $command );
close $command_out;
Run Code Online (Sandbox Code Playgroud)
但确实如此
open( my $command_out, "-|", $command );
sleep 3; # why do I need to sleep?
close $command_out;
Run Code Online (Sandbox Code Playgroud)
为什么?
我认为close在命令完成之前应该阻止:
关闭任何管道文件句柄会导致父进程等待子进程完成...(请参阅http://perldoc.perl.org/functions/open.html).
编辑
我在最后一行添加了这个:
say "ret=$ret, \$?=$?, \$!=$!";
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,打印输出是:
ret=, $?=13, $!=
Run Code Online (Sandbox Code Playgroud)
(这close两种情况都意味着失败,对吧?)
当试图执行这段代码时:
public void load(String filename) {
FileHandle file = Gdx.files.external(filename + ".bim");
Json json = new Json();
String text = file.readString();
datamap.clear();
datamap = json.fromJson(HashMap.class, text);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
线程"LWJGL Application"中的异常com.badlogic.gdx.utils.GdxRuntimeException:com.badlogic.gdx.utils.SerializationException:无法创建类(缺少no-arg构造函数):com.bvo.easyBim.Model.Cursor at com .badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:113)引起:com.badlogic.gdx.utils.SerializationException:无法创建类(缺少无参数构造函数):com.bvo.easyBim .Model.Cursor com.badlogic.gdx.utils.Json.newInstance(Json.java:915)at com.badlogic.gdx.utils.Json.readValue(Json.java:793)at com.badlogic.gdx.utils .Json.readValue(Json.java:803)位于com.badlogic.gdx.utils.Json.fromJson(Json.java:644)的com.bvo.easyBim.View.DataProcessor.load(DataProcessor.java:85)at com.bvo.easyBim.View.World.init(World.java:115)com.bvo.easyBim.View.WorldRenderer.buttons(WorldRenderer.java:173)com.bvo.easyBim.View.WorldRenderer.render( WorldRenderer.java:106)位于com.badlogic的com.bvo.easyBim.Screens.AppScreen.render(AppScreen.java:22).gdx.Game.render(Game.java:46)at com.bvo.easyBim.EasyBim.render(EasyBim.java:39)at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:187)在com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:110)引起:java.lang.InstantiationException:com.bvo.easyBim.Model.Cursor at java.lang.Class.newInstance0(Unknown)来自java.lang.Class.newInstance(未知来源)的com.badlogic.gdx.utils.Json.newInstance(Json.java:901)... 12更多
在将其正确保存在另一段代码中后,我试图将json文件转换回数据图.(一个hashmap),但这似乎不起作用.
我猜他无法读取文本字符串,但实际上我不知道问题是什么.
我已经尝试过在python中只向一个文件写一个字节的所有内容.
i = 10
fh.write( six.int2byte(i) )
Run Code Online (Sandbox Code Playgroud)
将输出'0x00 0x0a'
fh.write( struct.pack('i', i) )
Run Code Online (Sandbox Code Playgroud)
将输出'0x00 0x0a 0x00 0x00'
我不明白为什么这么难做.
我正在尝试使用单行代码,根据行本身字段的内容,将从输入源读取的行写入不同的文件。
我的方法是使用散列来存储文件句柄,以避免多次打开相同的文件,一旦在读取的新行中找到了以前未出现过的字段的值,就动态向该散列添加键。
但是,使用存储文件句柄的哈希值和常见的print / printf调用,例如
print $hash{ $field_value } "String"
Run Code Online (Sandbox Code Playgroud)
导致编译错误。更换$hash{ $field_value }用STDERR,例如,导致干净的汇编。
下面的示例带有示例单线。
$ cat /tmp/input_file
mail1.sql:INSERT INTO
mail2.sql:INSERT INTO
mail3.sql:INSERT INTO
mail4.sql:INSERT INTO
mail6.sql:INSERT INTO
mail7.sql:INSERT INTO
mail8.sql:INSERT INTO
mail9.sql:INSERT INTO
maildev.sql:INSERT INTO
$ perl -C -nE '
m{^(?<server>mail[^.]+)\.sql:(?<string>INSERT INTO)};
exists $fd->{$+{server}} or open($fd->{$+{server}}, ">>", "/tmp/". $+{server}.".tmp.sql");
print sprintf(qq{server %s.domain.tld command %s;\n}, $+{server}, $+{string});
' /tmp/input_file
server mail1.domain.tld command INSERT INTO;
server mail2.domain.tld command INSERT INTO;
server mail3.domain.tld command INSERT INTO;
server mail4.domain.tld command …Run Code Online (Sandbox Code Playgroud) 我想知道在我使用时向句柄添加额外数据的最佳方法是IO::Select什么?
基本上我想添加一个句柄,IO::Select但也有附加到该句柄的附加信息,我可以稍后检索。
注意:我知道我可以保留一个单独的数据结构来保存一个句柄和附加数据,但这需要协调两个数据结构,这可能会导致比其价值更多的问题。
我已经看到close ARGV可以关闭当前处理的文件,但它似乎ARGV实际上不是文件句柄,所以我不能在调用中使用它read。有什么方法可以获取当前的文件句柄,还是我必须自己显式打开文件?
C++是否可以通过文件句柄访问infile数据?例如,Perl中的典型习语是:
while (<DATA>) {
chomp;
# do sth with $_
}
__DATA__
Foo
Bar
Run Code Online (Sandbox Code Playgroud)
在C++中这样做的方法是什么?
在我的应用程序中附带一个卸载程序.一切都运行正常,除了在完成所有操作后我找不到删除uninstaller.exe文件的方法.
我试图将当前程序集exe复制到临时目录中,但原始文件的文件句柄仍然被锁定.
有任何想法吗?
我试图在perl脚本中使用stat().我已经阅读了关于perldocs的文档,说如何使用它:
$mode = (stat($filename))[2];
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
$mode = (stat($filename))[2];
print $mode;
Use of uninitialized value $mode in print at ...
Run Code Online (Sandbox Code Playgroud)
我认为需要另一种语法来访问stat返回的值.Data :: dumper返回此结构:
@stat = stat($filename);
print Dumper(@stat);
$VAR1 = bless( [
48,
305368,
33188,
1,
0,
0,
0,
'2011',
1397569653,
1397569653,
1397569653,
4096,
8
], 'File::stat' );
Run Code Online (Sandbox Code Playgroud)