在Android-ndk中,我们可以使用"__android_log_write","_ _ android_log_print"等来将消息输出到"LogCat"窗口.如果我使用"std :: cout"输出一些字符串怎么样?例如
std::cout << "some strings" << std::endl;
Run Code Online (Sandbox Code Playgroud)
字符串将在何处发送.
似乎Android没有控制台应用程序,并且可能无法发送上述字符串.我可以将"stdout"重定向到文件,以便将字符串发送到"std :: cout"等同于记录消息吗?
我有一个案例要在Python中执行以下shell命令并获取输出,
echo This_is_a_testing | grep -c test
Run Code Online (Sandbox Code Playgroud)
我可以使用这个python代码在python中执行上面的shell命令,
>>> import subprocess
>>> subprocess.check_output("echo This_is_a_testing | grep -c test", shell=True)
'1\n'
Run Code Online (Sandbox Code Playgroud)
但是,由于我不想使用"shell = True"选项,我尝试了以下python代码,
>>> import subprocess
>>> p1 = subprocess.Popen(["echo", "This_is_a_testing"], stdout=subprocess.PIPE)
>>> p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout)
>>> p1.stdout.close()
>>> p2.communicate()
(None, None)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么输出是"无",因为我已经参考了网页上的描述:http://docs.python.org/library/subprocess.html#subprocess.PIPE
我错过了代码中的一些要点吗?有什么建议/想法吗?提前致谢.
我有一些Bash Shell命令的输出数据.输出以"\n"或"\ 0"逐行分隔.我想知道有没有办法将输出传递到Perl并在Perl中逐行处理数据(就像将输出汇总到awk一样,但在我的情况下它是在Perl上下文中.).我想命令可能是这样的:
Bash Shell command | perl -e 'some perl commands' | another Bash Shell command
Run Code Online (Sandbox Code Playgroud)
假设我想在"逐行"的基础上将所有":"字符替换为"@"字符(不是全局替换,我可以使用条件,例如奇数或偶数行来确定当前行是否应该具有替代与否.),那么我怎么能实现这一点.
我在Ubuntu 12.04 amd64上使用cmake 2.8.7.我系统中安装的OpenJDK JRE组件如下所示:
$ sudo dpkg --list | grep jdk
openjdk-6-jre 6b27-1.12.5-0ubuntu0.12.04.1 OpenJDK Java runtime, using Hotspot JIT
openjdk-6-jre-headless 6b27-1.12.5-0ubuntu0.12.04.1 OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-6-jre-lib 6b27-1.12.5-0ubuntu0.12.04.1 OpenJDK Java runtime (architecture independent libraries)
Run Code Online (Sandbox Code Playgroud)
但是,我没有使用OpenJDK JRE组件.我在"/usr/lib/jvm/jdk1.7.0_25"中手动安装了Oracle Java 7 JDK,并使用"update-alternatives"将"java"指向我安装的Oracle Java 7 JDK.我没有设置任何"JAVA_HOME","JAVA_BIN","CLASSPATH"环境变量和手动安装的Oracle Java 7 JDK似乎在Eclipse 4.3中运行正常.
问题是当我在cmake中使用"find_package(JNI)"并使用"message()"函数来显示JNI变量时,我得到以下结果:
Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
JNI_FOUND = FALSE
JNI_LIBRARIES = /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/libjawt.so;/usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server/libjvm.so
JAVA_INCLUDE_PATH = JAVA_INCLUDE_PATH-NOTFOUND
JAVA_INCLUDE_PATH2 = JAVA_INCLUDE_PATH2-NOTFOUND
JAVA_AWT_INCLUDE_PATH = JAVA_AWT_INCLUDE_PATH-NOTFOUND
JAVA_JVM_LIBRARY = /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server/libjvm.so
JAVA_AWT_LIBRARY = /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/libjawt.so
JNI_INCLUDE_DIRS …Run Code Online (Sandbox Code Playgroud) 对于以下3个编译案例:
gcc -o helloc hello.c (1)
g++ -o hellocpp hello.cpp (2)
c++ -o hellocpp hello.cpp (3)
Run Code Online (Sandbox Code Playgroud)
在每种情况下,我如何知道"默认包含目录","默认链接目录"和"默认链接库"?我在32位Ubuntu 11.04环境中使用gcc 4.5.2.
对于case(1),gcc是使用标准C库还是GNU C库?两个C库之间有区别吗?
比较情况(2)和(3),编译器使用的"默认链接库"有什么不同吗?他们使用的是标准C++库还是GNU C++库?两个C++库有什么区别?
提前感谢任何建议.
劳伦斯曾
这是我之前问题的继承者,是否可以通过同步安全地访问此变量?
对于以下程序,
Class SubClassB extends SuperClassA {
protected int c;
public void inc() {
synchronized (this) {
c++;
}
}
public void dec() {
synchronized ( (SuperClassA) this) {
c--;
}
}
}
Run Code Online (Sandbox Code Playgroud)
计数器"c"是否可以访问线程安全?我不确定在"dec()"方法中,SuperClassA是否将"this"引用为synchronized块的有效对象?如果是,两个同步块是否会锁定相同的"this"对象?(在我看来,"(SuperClassA)这个"不等于"这个")
这个奇怪的模拟代码来自以下现实生活中的例子,其中SuperClassA是一个不应被修改的基类,
Class SuperClassA {
protected int c;
public void dec() {
synchronized (this) {
c--;
}
}
}
Class SubClassB extends SuperClassA {
public void inc() {
synchronized (this) {
c++;
}
}
public void dec() {
super.dec();
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,SubClassB中的"dec()"方法调用它的超类的"dec()"方法,该方法执行对"this"对象的锁定,我认为该对象是"SuperClassA.this".如果SubClassB的"inc()"方法中的锁定对象与SubClassB的"dec()"方法中的锁定对象不完全相同,那么我想知道SubClassB中的继承计数器"c"可能不会被不同的线程安全地访问.我觉得在同步块中使用"this"引用有一些含糊之处.
在现实生活中的例子中,如果我希望SubClassB的计数器"c"是线程安全的,我是否需要在其"dec()"方法中再添加一个synchronized块,如下所示,
Class SubClassB extends …Run Code Online (Sandbox Code Playgroud) 我通常使用以下Python代码从文件中读取行:
f = open('./my.csv', 'r')
for line in f:
print line
Run Code Online (Sandbox Code Playgroud)
但是如果文件是由"\ 0"(而不是"\n")以行分隔的呢?是否有可以处理此问题的Python模块?
谢谢你的建议.
我已按照本页上的说明从Git构建Qt 5,从源代码构建Qt 5.5.源位于"〜/ qt5_source_built/qt5",Qt 5.5构建的系统位于"〜/ qt5_source_built/qt5.5-build"中.我使用了以下配置选项:
~/qt5_source_built/qt5/configure -developer-build -opensource -no-gtkstyle -nomake examples -nomake tests
Run Code Online (Sandbox Code Playgroud)
然后使用"make -j4"构建qt-5.5系统.系统构建正常.
我使用CMake为Qt 5.5构建的系统开发应用程序.它适用于通常的情况(例如可以使用qtwebkit).但是,当我想在新应用程序上测试qtwebengine模块时,我发现在"〜/ qt5_source_built/qt5.5-build/qtbase"目录下似乎没有qtwebengine包含文件和库文件.
我试图使用不同的目标重新制作系统:
make all -j4
make module-qtwebengine -j4
make module-qtwebengine-all -j4
Run Code Online (Sandbox Code Playgroud)
但控制台一直在输出
... Nothing to be done for ...
Run Code Online (Sandbox Code Playgroud)
重新制作后,仍然无法在"〜/ qt5_source_built/qt5.5-build/qtbase"目录下找到qtwebengine include和库文件.
我注意到qtwebengine源文件似乎可以在"〜/ qt5_source_built/qt5/qtwebengine/src"中找到,但我无法使用"make"命令构建它.
我刚刚错过了构建目录下的qtwebengine include和库文件吗?如果没有,有谁知道如何使用这个Qt 5.5 git源构建qtwebengine?
谢谢你的任何建议.
我使用以下Bash Shell脚本在当前目录下递归列出".txt"文件:
#!/bin/bash
for file in $( find . -type f -name "*.txt" )
do
echo $file
# Do something else.
done
Run Code Online (Sandbox Code Playgroud)
但是,当前目录下的某些".txt"文件名称中包含空格,例如"my testing.txt".列表已损坏,例如"my testing.txt"列为
my
testing.txt
Run Code Online (Sandbox Code Playgroud)
似乎"for"循环使用"空格"(空格,\n等)来分隔文件列表,但在我的情况下,我只想使用"\n"来分隔文件列表.
有什么办法可以修改这个脚本来达到这个目的.任何的想法.
提前致谢.
我有一个NUL分隔输出来自以下命令:
some commands | grep -i -c -w -Z 'some regex'
Run Code Online (Sandbox Code Playgroud)
输出包含以下格式的记录:
[file name]\0[pattern count]\0
Run Code Online (Sandbox Code Playgroud)
我想使用文本操作工具(如sed/awk)将记录更改为以下格式:
[file name]:[pattern count]\0
Run Code Online (Sandbox Code Playgroud)
但似乎sed/awk通常只处理由"换行符"字符分隔的记录.我想知道如何使用sed/awk实现我的目的,或者如果sed/awk无法处理这种情况,我应该使用其他Linux工具.
谢谢你的任何建议.
劳伦斯