我想检查用户是否设置了可选的argparse参数.
我可以使用isset安全地检查吗?
像这样的东西:
if(isset(args.myArg)):
#do something
else:
#do something else
Run Code Online (Sandbox Code Playgroud)
对于float/int/string类型参数,这是否相同?
我可以设置一个默认参数并检查它(例如,为字符串设置myArg = -1或"",或"NOT_SET").但是,我最终想要使用的值仅在稍后的脚本中计算.因此我将其设置为-1作为默认值,然后将其更新为其他内容.与简单地检查该值是否由用户设置相比,这看起来有点笨拙.
假设我有一个从一个城镇到另一个城镇的路线.从Google Maps API我可以恢复两者之间的路由.但是,从谷歌返回的路线是一条行车路线,其中包括仅在腿部有另一步的地方(例如,我必须从一条高速公路转向另一条高速公路的地方)的地理坐标.
我需要的是沿着整个路线的地理位置(纬度/经度),以特定的间隔(例如,每1/4英里或100米).
有没有办法通过Google Maps API /网络服务实现这一目标?
或者OpenStreetMap数据库是否可以这样做?
亲切的问候,玛德琳.
我正在尝试从另一个文件中获取值,并在SLURM提交脚本中使用它.但是,我得到的错误是该值是非数字的,换句话说,它没有被解除引用.
这是脚本:
#!/bin/bash
# This reads out the number of procs based on the decomposeParDict
numProcs=`awk '/numberOfSubdomains/ {print $2}' ./meshModel/decomposeParDict`
echo "NumProcs = $numProcs"
#SBATCH --job-name=SnappyHexMesh
#SBATCH --output=./logs/SnappyHexMesh.log
#
#SBATCH --ntasks=`$numProcs`
#SBATCH --time=240:00
#SBATCH --mem-per-cpu=4000
#First run blockMesh
blockMesh
#Now decompose the mesh
decomposePar
#Now run snappy in parallel
mpirun -np $numProcs snappyHexMesh -parallel -overwrite
Run Code Online (Sandbox Code Playgroud)
当我将其作为普通的Bash shell脚本运行时,它会正确打印出proc的数量并进行正确的mpirun
调用.因此,该awk
命令正确地解析了proc的数量,并且按预期解除引用变量.
但是,当我使用以下内容将其提交给SLURM时:
sbatch myScript.sh
Run Code Online (Sandbox Code Playgroud)
我收到错误:
sbatch: error: Invalid numeric value "`$numProcs`" for number of tasks.
Run Code Online (Sandbox Code Playgroud)
有人能帮忙吗?
我有一个C++类,我想拥有一个用于记录的流.
在构造对象之后,应该能够设置(并且可能重置)流.
应该可以将流设置std::cout
为文件流,或者将文件流设置为记录到文件,或者将字符串流设置为仅忽略数据(一种/dev/null
类型).在任何情况下,它应该是一个ostream
类型对象,对象的创建者可以随时重置.该类本身无视具体的流类型.
我可以使用指向ostream的指针来实现这一点,但是语法变得有点烦人,必须使用deref运算符:
(*m_log) << "message";
Run Code Online (Sandbox Code Playgroud)
而不是
m_log << "message";
Run Code Online (Sandbox Code Playgroud)
但是我不能使用引用,因为在初始化对象之后需要重置流对象.
有没有一种优雅的方法来实现这一点,即避免使用指针,但仍然能够在构建后重置?
我想在 C++ 中重复对 Python3 中已经实现的一些代码的测试,这些代码依赖于numpy.random.rand
和randn
值以及特定的种子(例如seed = 1
)。
我知道Python的随机实现是基于梅森扭曲器的。C++ 标准库也在std::mersenne_twister_engine
.
C++ 版本返回无符号 int,而 Python rand 是浮点值。
有没有办法在 C++ 中获得与 Python 中生成的值相同的值,并确保它们相同?randn
对于由?生成的数组也是如此
在 Emacs 中进行拼写检查时,我习惯使用M-xispell
来调用拼写检查器。我读到有些人配置了他们的 Emacs,因此这会调用 aspell 而不是 ispell (或可能是 hunspell)。
我如何判断我正在调用 ispell 还是 aspell?
我查看了我的.emacs
文件(在我的主目录中),也没有看到任何引用。
另外,(假设我使用 ispell),“私人词典”保存在我插入单词的位置。我想备份该文件(和/或将其传输到另一台机器)。
我正在使用第三方开源应用程序来执行我认为很奇怪的事情.我想听听你对你是否认为这是错误/邪恶/憎恶/等的看法,或者是否有合理的理由这样做.
简单地说,他们使用#include pre-proc指令来包含包含代码片段的"头文件".不是函数的原型.不是内联功能.只是代码的一部分.
这是一个简单的例子.首先是main.cpp文件:
#include <iostream>
//Other "normal" includes here...
int main(int argc, char *argv[]) {
cout << "Initializing program..." << endl;
#include "parseArgs.h"
// ... remainder of the program
cout << "Exiting." << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并且在parseArgs.h头文件中,有一个小代码片段.请注意,这只是parseArgs.h文件中的内容.这不是功能的一部分.没有包含警卫,只有以下4行:
argList args(argc, argv);
if(!args.valid()) {
cout << "Invalid arguments.";
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
在真实的程序中,有几个#include指令,每个指令执行另一个小任务.
这似乎是危险和疯狂的.我不知道他们为什么不写作并将其称为函数.
你的想法和意见?
我感兴趣的是OpenMPI中是否有命令或技术要进行原子调用以写入stdout(或者就此而言,任何流).
我注意到的是,在执行MPI程序期间,写入cout(或其他流)的调用可能会变得混乱,因为每当proc到达某段代码时,每个proc都可以写入.报告结果时,可以通过多个过程写入一行,这会使问题混乱.所以2个不同的过程可能会做这样的事情:
//Proc 10 - results calculated somewhere above
// result1 = 10
// result2 = 11
cout << "My results are: " << result1 << " " << resul2 << endl;
Run Code Online (Sandbox Code Playgroud)
和:
//Proc 20 - results calculated somewhere above
// result1 = 20
// result2 = 21
cout << "My results are: " << result1 << " " << resul2 << endl;
Run Code Online (Sandbox Code Playgroud)
但结果可能是:
My results are: 20 My results are: 10 11 21
Run Code Online (Sandbox Code Playgroud)
我正在寻找的东西就像"阻塞"或原子cout(以及可能写入其他流,如文件流).因此,一旦我开始编写一个cout,它就会阻塞直到语句结束,或者直到endl或者刷新流发出.如果是这种情况,我会保证两条线是分开的(当然,我仍然不知道哪条线会先出现):
My results are: 20 21 …
Run Code Online (Sandbox Code Playgroud) 我正在使用VirtualBox(5.0.10)运行Windows 10.我安装了Ubuntu 14.04作为客户操作系统,它通过vboxfs共享访问主机操作系统.
当通过此共享编辑保存在主机(Windows)操作系统上的文件时,emacs会不断向我发出警告,提示我当前正在编辑的文件已在磁盘上更改(File.txt changed on disk; really edit the buffer?
).在尝试保存时会发出类似的警告.
这仅在编辑保存在主机操作系统上的文件时发生,并且我无法将其链接到任何其他软件/进程(例如,防病毒软件).它似乎与2 OS上文件时间戳的差异有关,虽然我确实在Ubuntu中打开了NTP,并且在重新启动2个OS后立即发生错误(因此我假设时间与他们将永远).它在每次第一次保存后发生.
在Stackoverflow问题中,我们提出了这个问题并提供了解决方法.但是,由于它们实际上只是关闭了检查文件是否在编辑器外的磁盘上被修改的安全保护,因此在那里给出的解决方法没有令人满意地处理问题.
真正的问题似乎在于时间戳问题.有谁知道如何解决这个问题?
我已经在 Windows 10 上安装了 Python 3.10。
然后我安装了 numpy 和 matplotlib 没有问题。
但是当我尝试安装 scipy 时,出现大量错误。
安装顺序如下。
这与需要 MKL/BLAS 库有关吗?如果是这样,我应该安装什么?
Microsoft Windows [Version 10.0.19043.1288]
(c) Microsoft Corporation. All rights reserved.
C:\Users\Madeleine>echo %PATH%
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\TortoiseSVN\bin;C:\Users\Madeleine\AppData\Local\Programs\Python\Python310\Scripts\;C:\Users\Madeleine\AppData\Local\Programs\Python\Python310\;C:\Users\Madeleine\AppData\Local\Microsoft\WindowsApps;C:\Users\Madeleine\AppData\Local\Programs\Git\cmd;C:\Users\Madeleine\AppData\Local\Programs\Python\Python310;C:\Users\Madeleine\AppData\Local\Programs\Python\Python310\Scripts;
C:\Users\Madeleine>cd AppData
C:\Users\Madeleine\AppData>
C:\Users\Madeleine\AppData>
C:\Users\Madeleine\AppData>cd Local
C:\Users\Madeleine\AppData\Local>cd Programs
C:\Users\Madeleine\AppData\Local\Programs>cd Python
C:\Users\Madeleine\AppData\Local\Programs\Python>cd Python310
C:\Users\Madeleine\AppData\Local\Programs\Python\Python310>cd Scripts
C:\Users\Madeleine\AppData\Local\Programs\Python\Python310\Scripts>
C:\Users\Madeleine\AppData\Local\Programs\Python\Python310\Scripts>pip3.exe install numpy
Collecting numpy
Using cached numpy-1.21.3-cp310-cp310-win_amd64.whl (14.0 MB)
Installing collected packages: numpy
Successfully installed numpy-1.21.3
WARNING: You are using pip version 21.2.3; however, version 21.3.1 is available.
You should consider upgrading …
Run Code Online (Sandbox Code Playgroud) Python,64 位 Ubuntu 12.04 上的 2.7.3 版
我有一个介于 0 和 99.99 之间的浮点数。我需要以这种格式将其打印为字符串:
WW_DD
其中 WW 是整数,DD 是四舍五入的小数点后 2 位数字。字符串需要前后填充 0 以使其格式始终相同。
一些例子:
0.1 --> 00_10
1.278 --> 01_28
59.0 --> 59_00
Run Code Online (Sandbox Code Playgroud)
我做了以下事情:
def getFormattedHeight(height):
#Returns the string as: XX_XX For example: 01_25
heightWhole = math.trunc( round(height, 2) )
heightDec = math.trunc( (round(height - heightWhole, 2))*100 )
return "{:0>2d}".format(heightWhole) + "_" + "{:0>2d}".format(heightDec)
Run Code Online (Sandbox Code Playgroud)
除了格式为 00_28 的数字 0.29 之外,它运行良好。
有人能找到适用于 0 到 99.99 之间所有数字的解决方案吗?
刚刚开始使用 tmux。到目前为止我真的很喜欢它——它是屏幕的可靠替代品。我遇到的一个问题是 tmux 窃取了其中运行的 Midnight Commander 的 Alt(元)按键。
\n\n我已经将前缀键设置为 C-[,效果很好。但在使用 Midnight Commander 时,tmux 也将 Alt + anykey 解释为与 C-[ + anykey 相同。由于 MC 中有很多 Alt+ 按键,这变得非常烦人。
\n\n因此,我要么需要让 tmux 忽略其中运行的所有应用程序的 Alt + 按键(例如,Midnight Commander、emacs 等)。
\n\n我的 .tmux.conf 文件如下所示。任何帮助将不胜感激。
\n\n谢谢,\n玛德琳。
\n\n# Turn on the status bar and change the coloring to my preference.\n# It is handy to highlight in red the active window.\nset -g status on\nset -g status-bg black\nset -g status-fg white\nset -g status-left \xe2\x80\x98#[fg=green]#H\xe2\x80\x99\nset-window-option -g …
Run Code Online (Sandbox Code Playgroud) 我有一系列目录都被命名为浮点值,例如:
0
1
2
2.5
6
6.1
10
Run Code Online (Sandbox Code Playgroud)
我想获得最后(最高)编号的目录.在目录名称(字符串)上使用sort()方法,我在1之后直接获得10.
dirs = os.listdir(path)
dirs.sort()
Run Code Online (Sandbox Code Playgroud)
这给出了顺序:
0
1
10
2
2.5
6
6.1
Run Code Online (Sandbox Code Playgroud)
我可以通过将每个浮点数转换为浮点数然后对列表进行排序将它们放入浮点列表中,从而解决了排序问题.但是当我返回字符串的值时,我得到10.0,这不是目录的名称.我需要它正好是"10"(或者无论最后一个目录是什么命名).
有一种优雅的方式来做到这一点?
c++ ×4
python ×4
emacs ×2
linux ×2
alt ×1
argparse ×1
atomic ×1
awk ×1
bash ×1
bind ×1
blocking ×1
cout ×1
dictionary ×1
geolocation ×1
google-maps ×1
include ×1
ispell ×1
list ×1
mc ×1
member ×1
openmpi ×1
python-3.x ×1
random ×1
scipy ×1
shell ×1
slurm ×1
sorting ×1
stream ×1
tmux ×1
ubuntu ×1
variables ×1
virtualbox ×1
windows-10 ×1