小编Ele*_*ena的帖子

什么`-H`选项对CMake意味着什么?

这个关于CMake的前一个问题的答案显示了这个命令行:

cmake -H. -Bbuild -G "MSYS Makefiles"
Run Code Online (Sandbox Code Playgroud)

-H.选项在这里执行什么任务?cmake --help-H打印帮助......

我正在使用CMake 3.2.3.

cmake

35
推荐指数
2
解决办法
5665
查看次数

捕获`KeyboardInterrupt`而不关闭Python中的Selenium Webdriver会话

Python程序通过Selenium WebDriver驱动Firefox.代码嵌入在try/ exceptblock中,如下所示:

session = selenium.webdriver.Firefox(firefox_profile)
try:
    # do stuff
except (Exception, KeyboardInterrupt) as exception:
    logging.info("Caught exception.")
    traceback.print_exc(file=sys.stdout)
Run Code Online (Sandbox Code Playgroud)

如果程序因错误而中止,则WebDriver会话不会关闭,因此Firefox窗口保持打开状态.但是如果程序以KeyboardInterrupt异常中止,则Firefox窗口会关闭(我想因为WebDriver会话也被释放了),我想避免这种情况.

我知道两个异常都通过相同的处理程序,因为我"Caught exception"在两种情况下都看到了消息.

我怎么能避免关闭Firefox窗口KeyboardInterrupt

python keyboardinterrupt selenium-webdriver

19
推荐指数
1
解决办法
1461
查看次数

Silence PyLint警告字符串插值的未使用变量

say模块为Python带来字符串插值,如下所示:

import say

def f(a):
    return say.fmt("The value of 'a' is {a}")
Run Code Online (Sandbox Code Playgroud)

但是,PyLint抱怨变量'a'从未使用过.这是一个问题,因为我的代码say.fmt广泛使用.我该如何沉默这个警告?

python pylint unused-variables

17
推荐指数
4
解决办法
2万
查看次数

Bash:"printf%q $ str"在脚本中删除空格.(备择方案?)

printf%q应该引用一个字符串.但是,当执行到脚本中时,它会删除空格.

这个命令:

printf %q "hello world"
Run Code Online (Sandbox Code Playgroud)

输出:

hello\ world
Run Code Online (Sandbox Code Playgroud)

哪个是对的.

这个脚本:

#!/bin/bash

str="hello world"
printf %q $str
Run Code Online (Sandbox Code Playgroud)

输出:

helloworld
Run Code Online (Sandbox Code Playgroud)

这是错的.

如果确实需要这样的行为,那么脚本中有什么替代方法可以引用包含任何字符的字符串,以便可以通过被调用的程序将其转换回原始字符?

谢谢.

软件:GNU bash,版本4.1.5(1)-release(i486-pc-linux-gnu)

编辑:解决了,谢谢.

bash printf

11
推荐指数
1
解决办法
2万
查看次数

如何在uptodate Ant命令中使用filelist作为文件集?

我有一个目标,build.xml它创建一个Zip文件.为了避免在没有更新文件的情况下创建Zip,我想事先检查更新.AFAIK,uptodate是使用的任务.

以下是相关(简化)脚本部分:

<filelist id="zip-files">
<file name="C:/main.exe" />
<file name="D:/other.dll" />
</filelist>

<target name="zip" depends="zip-check" unless="zip-uptodate">
<zip destfile="${zip-file}" >
    <filelist refid="zip-files" />
</zip>
</target>

<target name="zip-check">
 <uptodate property="zip-uptodate"
           targetfile="${zip-file}">
    <srcfiles refid="zip-files" />
 </uptodate>
</target>
Run Code Online (Sandbox Code Playgroud)

但是,uptodate失败因为srcfiles必须引用a fileset,而不是a filelist.仍然,我不能使用a,fileset因为它需要一个dir属性,我无法设置,因为源文件不共享基目录.

当然,我可以在压缩它们之前将所有文件复制到公共目录,从而能够使用fileset,但我想知道是否有替代解决方案.

我正在使用Ant 1.8.1

ant dependencies fileset filelist

10
推荐指数
1
解决办法
4119
查看次数

从命令行选择 Firefox 中的选项卡

Firefox 已经允许您从命令行打开新的 URL。有没有办法从命令行按标题或 URL 选择现有选项卡?

firefox tabs command-line

8
推荐指数
1
解决办法
1741
查看次数

创建记录器时Log4j 2挂起

我有这个简单的程序:

package myPackage;

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class Test {
    private static Logger logger; 

    public static void main(String[] args) throws Exception {
        System.out.println("Creating logger...");
        logger = LogManager.getLogger(Test.class); 
        System.out.println("Logger created.");
        logger.info("Hello world!");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在调试器下运行程序,它会打印:

Creating logger...
Run Code Online (Sandbox Code Playgroud)

然后挂起

如果我在没有调试器的情况下运行程序,它会打印:

Exception in thread "main" java.lang.StackOverflowError
    at sun.reflect.Reflection.quickCheckMemberAccess(Reflection.java:84)
    at java.lang.reflect.Method.invoke(Method.java:489)
    at org.apache.logging.log4j.util.ReflectionUtil.getCallerClass(ReflectionUtil.java:128)
    at org.apache.logging.log4j.util.ReflectionUtil.getCallerClass(ReflectionUtil.java:205)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:42)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:42)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:329)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:42)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:48)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:329)
    [... more of the same]
Run Code Online (Sandbox Code Playgroud)

我使用Log4j 2版本2.5和SLF4J版本1.7.18.

编辑:这是我的课程路径: …

java log4j2

8
推荐指数
1
解决办法
6513
查看次数

Waf(构建工具):PHONY目标如Make?

你如何设定目标 - 也许Waf称之为"命令" - 总是被执行?那就像是Make中的PHONY目标?

我正在使用Waf构建一个Visual Studio解决方案,其依赖性和重新编译我更喜欢由Visual Studio本身管理.

目前我正在使用这个(简化)定义:

def build(bld):
  bld( rule = "msbuild MySolution.sln /target:Build /property:CONFIGURATION=Release",
      source = "",
      target = "program.exe" )
Run Code Online (Sandbox Code Playgroud)

但是,只有在"program.exe"丢失时才会调用"msbuild".

谢谢.

makefile waf

7
推荐指数
1
解决办法
872
查看次数

Emacs Lisp:相同的正则表达式可以匹配具有相同数量分组的两种不同模式吗?

我已经开始根据http://www.emacswiki.org/emacs/EmacsScripts上给出的指示编写Emacs脚本,这基本上说你的脚本应该从以下开始:

:;exec emacs --script "$0" $@ 
Run Code Online (Sandbox Code Playgroud)

现在我想自定义auto-mode-interpreter-regexp' accordingly, to make Emacs scripts automatically loaded withemacs-lisp-mode'.

最初的`auto-mode-interpreter-regexp'用于匹配:

#! /bin/bash
#! /usr/bin/env perl
Run Code Online (Sandbox Code Playgroud)

等等,因此就是这个:

"\\(?:#![   ]?\\([^     \n]*/bin/env[   ]\\)?\\([^  \n]+\\)\\)"
Run Code Online (Sandbox Code Playgroud)

我尝试添加新的正则表达式作为替代方案:

(setq auto-mode-interpreter-regexp
   (concat ;; match "#! /bin/bash", "#! /usr/bin/env perl", etc.
           "\\(?:#![    ]?\\([^     \n]*/bin/env[   ]\\)?\\([^  \n]+\\)\\)"
           ;; or
           "\\|"
           ;; match ":;exec emacs "
           "\\(?::;[    ]?\\(exec\\)[   ]+\\([^     \n]+\\)[    ]*\\)"))
Run Code Online (Sandbox Code Playgroud)

但是这一个在匹配整个字符串时,无法捕获其子匹配,尤其是检测解释器所需的第二个子匹配.因此,我混合了正则表达式以同时匹配两个标题:

(setq auto-mode-interpreter-regexp
    (concat ;; match "#!" or ":;"
            "\\(?:#!\\|:;\\)"
            ;; optional spaces
            "[  ]?"
            ;; match "/bin/bash", "/usr/bin/env" …
Run Code Online (Sandbox Code Playgroud)

regex emacs elisp

7
推荐指数
1
解决办法
448
查看次数

CMake工作流程?

我正在学习CMake,我在理解其多步骤工作流程时遇到了问题.到目前为止,我的理解是你:

  • 写一个 CMakeLists.txt
  • cmake从子目录运行以生成构建文件(在我的情况下为Makefile)
  • make

但是,我不明白你应该如何处理不同的目标(Release vs Debug).通过在两个不同的子目录中运行CMake?

另外,我不明白你为什么要编辑CMakeCache.txt(还有一个GUI工具)../configure通过传递不同的选项来模仿你将要实现的目标?

cmake cmake-gui

6
推荐指数
1
解决办法
2044
查看次数