在 Python 中读取操作系统环境变量是小菜一碟。尝试使用以下三行代码'PATH'在 Windows 中读出变量:
#################
# PYTHON 3.5 #
#################
>> import os
>> pathVar = os.getenv('Path')
>> print(pathVar)
C:\Anaconda3\Library\bin;C:\Anaconda3\Library\bin;
C:\WINDOWS\system32;C:\Anaconda3\Scripts;C:\Apps\SysGCC\arm-eabi\bin;
...
Run Code Online (Sandbox Code Playgroud)
现在对'PATH'变量做一个小的改变。你可以在...里找到它们:
控制面板>>系统和安全>>系统>>高级系统设置>>环境变量
如果您在 Python 中运行相同的代码,则更改不可见!您必须关闭启动 Python 会话的终端。当您重新启动它并再次运行代码时,更改将可见。
有没有办法立即看到变化——而无需关闭python?这对于我正在构建的应用程序很重要。
非常感谢 :-)
编辑 :
Martijn Pieters 向我展示了以下链接: Windows 中是否有从命令提示符刷新环境变量的命令?
该链接中提到了许多选项。我选择了以下一个(因为它只是一个批处理文件,没有额外的依赖项):
REM --------------------------------------------
REM | refreshEnv.bat |
REM --------------------------------------------
@ECHO OFF
REM Source found on https://github.com/DieterDePaepe/windows-scripts
REM Please share any improvements made!
REM Code inspired by /sf/ask/12011191/
IF [%1]==[/?] GOTO :help
IF [%1]==[/help] GOTO :help
IF …Run Code Online (Sandbox Code Playgroud) 我有两个 Python 程序正在运行。程序 A 通过多处理模块连接到程序 B :
# Connection code in program A
# -----------------------------
import multiprocessing
import multiprocessing.connection
...
connection = multiprocessing.connection.Client(
('localhost', 19191), # <- address of program B
authkey='embeetle'.encode('utf-8') # <- authorization key
)
...
connection.send(send_data)
recv_data = connection.recv()
Run Code Online (Sandbox Code Playgroud)
大多数情况下它都能完美运行。但是,有时程序 B 会被冻结(细节并不重要,但通常在程序 B 的 GUI 生成模态窗口时发生)。
当程序 B 被冻结时,程序 A 在以下行挂起:
connection = multiprocessing.connection.Client(
('localhost', 19191), # <- address of program B
authkey='embeetle'.encode('utf-8') # <- authorization key
)
Run Code Online (Sandbox Code Playgroud)
它一直在等待回应。我想设置一个超时参数,但调用multiprocessing.connection.Client(..)没有一个。
我如何在这里实现超时?
注意: …
我正在PyQt4(并迁移到PyQt5)中编写 GUI 。这是我启动 GUI 的方式:
if __name__== '__main__':
app = QApplication(sys.argv)
QApplication.setStyle(QStyleFactory.create('Fusion')) # <- Choose the style
myGUI = MyMainWindow("First GUI")
app.exec_()
Run Code Online (Sandbox Code Playgroud)
PyQt4 中的默认样式:
显然,PyQt4具有以下样式:
'Windows''WindowsXP''WindowsVista''Motif''CDE''Plastique''Cleanlooks'PyQt5 中的默认样式:
PyQt5 有以下样式:
'Windows''WindowsXP''WindowsVista''Fusion'自定义样式?
这些样式都没有对 HiDpi 显示器(4k 等)的适当支持。例如,滚动条太小(参见这篇文章:如何从 PyQt 中的 QTextEdit 调整滚动条的大小?)。我什至没有提到那些视力不清晰的人的问题..
你知道一种为 4k 显示器或视力有问题的人提供良好支持的风格(最好是开源的)吗?
如果是这样,如何下载并安装这种样式?
非常感谢。
PyCharm决定我的Python代码中的某些括号是"冗余的".无论如何我想保留它们.所以PyCharm开始在我们身下用绿线惹恼我.我不想屈服于PyCharm的怪癖.
我可以通过以下方式忽略其他警告:
文件>设置>编辑器>检查>取消选中您不喜欢的所有警告.
可悲的是,"冗余括号"警告不会出现在该列表中.
我如何忽略此警告?
我使用STM32系列微控制器,更具体地说是该STM32F7系列。目前,我正在研究通用计时器的使用。
关于双缓冲寄存器。
微控制器有时会使用双缓冲寄存器。这样,软件就可以在不引起麻烦的情况下写入和读取寄存器。下图说明:
buffered register: active register:
-------------- --------------
| REGX_BUF | <-------> | REGX |
-------------- --------------
| |
| |
SOFTWARE HARDWARE
The software interacts Updates to and from the
only with the buffered active register take place
register. at specific moments (when it
is 'safe').
synonyms: synonyms:
- buffered register - active register
- preload register
- shadow register (?)
Run Code Online (Sandbox Code Playgroud)
有几个方面两者REGX_BUF并REGX从上图中。
REGX称为“活动寄存器”。REGX_BUF有时称为“缓冲寄存器”。其他术语是“预加载寄存器”和“影子寄存器(?)”。
混乱解释了。
不幸的是,术语“影子寄存器”存在混淆。根据我从互联网上获得的一些资料,它指的是REGX_BUF。但是在STM32F746微控制器的参考手册RM0385和STM32F767微控制器的RM0410中,我偶然发现了与“影子寄存器”一词完全相反的解释。它不是指 …
我正在构建一个微型微控制器,其中只包含用于自学目的的基本要素.通过这种方式,我可以刷新我对linkerscript,启动代码等主题的了解......
编辑:
我收到了很多评论,指出下面显示的"绝对最小STM32应用"并不好.当你注意到向量表不完整,.bss-section没有处理,外围地址不完整时,你是完全正确的,...请允许我解释原因.
作者的目的从未在本章中编写完整且有用的应用程序.他的目的是逐步解释链接器如何工作,启动代码如何工作,STM32的启动过程是什么样的,......纯粹用于教育目的.我可以欣赏这种方法,并学到了很多东西.
我在下面的例子取自相关章节的中间部分.本章继续向linkerscript和启动代码添加更多部分(例如初始化.bss-section).
我从他的章节中间放置文件的原因是因为我遇到了特定的错误消息.我想在继续之前解决这个问题.
有问题的章节在他书的最后.它适用于想要获得更多人们甚至不考虑的主题的更有经验或好奇的读者(大多数人使用制造商给出的标准linkerscript和启动代码而不读它).
请记住这一点,请让我们关注手头的技术问题(如下面的错误消息中所述).也请接受我真诚的道歉,我之前没有澄清作者的意图.但我现在已经完成了,所以我们可以继续前进;-)
我正在阅读的教程是本书的第20章:"掌握STM32"(https://leanpub.com/mastering-stm32).该书解释了如何使用两个文件制作一个微型微控制器应用程序:main.c和linkerscript.ld.由于我没有使用IDE(如Eclipse),我还添加build.bat并clean.bat生成编译命令.所以我的项目文件夹看起来像这样:
在继续之前,我应该提供一些关于我的系统的更多细节:
操作系统: Windows 10,64位
微控制器:带STM32F401RE微控制器的NUCLEO-F401RE板.
编译器: arm-none-eabi-gcc版本6.3.1 20170620(发布)[ARM/embedded-6-branch revision 249437].
主文件如下所示:
/* ------------------------------------------------------------ */
/* Minimal application */
/* for NUCLEO-F401RE */
/* ------------------------------------------------------------ */
typedef unsigned long uint32_t;
/* Memory and peripheral start addresses (common to all STM32 MCUs) */
#define FLASH_BASE 0x08000000
#define SRAM_BASE 0x20000000
#define PERIPH_BASE 0x40000000
/* …Run Code Online (Sandbox Code Playgroud) 我想读取文本文件的内容,并将其分配给我的makefile中的变量。我阅读了制作手册ch 8.6:file函数,并在我的makefile中编写了以下简单代码段:
# Snippet from my makefile
my_var = $(file < C:/full/path/to/my_file.txt)
all:
@echo $(my_var)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
*** Invalid file operation: < C:/full/path/to/my_file.txt. Stop.
Run Code Online (Sandbox Code Playgroud)
我特意选择$(file ..)而不是$(shell ..)函数来读取文件。那是因为我的makefile应该尽可能与平台无关。$(file ..)函数是纯makefile语法,而$(shell ..)函数则包含shell语法。
我究竟做错了什么?
我正在尝试使用纯CSS方法(不使用JavaScript)在我的网站(https://qscintilla.com/custom-lexer-example/)的代码段中插入行号。
正如您在上面的屏幕截图中看到的那样,我正在Wordpress中构建我的网站。我使用最新Wordpress版本中的“其他CSS”功能来插入自定义CSS。这是我的自定义CSS:
pre{
counter-reset: line;
}
code{
counter-increment: line;
}
code:before{
content: counter(line);
display: inline-block;
border-right: 1px solid #ddd;
padding: 0 .5em;
margin-right: .5em;
color: #888;
-webkit-user-select: none;
}
Run Code Online (Sandbox Code Playgroud)
当我在HTML中插入代码段时,效果很好,如下所示:
<pre>
<code> This is my first codeline </code>
<code> This is my second codeline </code>
<code> This is my third codeline </code>
<code> This is my fourth codeline </code>
</pre>
Run Code Online (Sandbox Code Playgroud)
不幸的是,当代码行达到两位数时,行号没有正确对齐。让我们放大问题:
当然,当代码行从两位数跳到三位数时,也会出现相同的问题
我怎样才能解决这个问题?
在他的"使用C++编程,原理和实践"一书中,Bjarne Stroustrup 在第314-316页(第9.4.4节)中介绍了成员初始化列表的概念.他使用以下示例:
// Simple Date (year, month, day)
class Date
{
public:
Date(int yy, int mm, int dd): y{yy}, m{mm}, d{dd}
{
//...
}
private:
int y, m, d;
};
Run Code Online (Sandbox Code Playgroud)
在页315上他说:
我们本来可以写的:
Run Code Online (Sandbox Code Playgroud)Date::Date(int yy, int mm, int dd) // constructor { y = yy; m = mm; d = dd; }但是我们原则上首先会默认初始化成员,然后为它们分配值.
因此,我可以得出结论,使用成员初始化列表使代码稍快一些吗?当然,没有人会注意到现代PC.但我打算使用C++进行嵌入式开发.
编辑:
我将进一步说明我的问题.通过"稍微快一点",我实际上意味着"更少的CPU周期".
我也同意这个特定例子的潜在效率提升几乎为零.但是对于更大的类和结构,它可能在微控制器上变得明显.
可以通过多种方式来初始化C ++中的对象(类或结构的实例)。某些语法引起对象的直接初始化,而其他语法则导致复制初始化。随着拷贝省音在编译器中启用,两者具有相同的性能。在禁用复制删除的情况下,当您为每个实例选择复制/初始化时,都会有一个附加的复制/移动构造函数调用(复制初始化)。
结论:复制初始化可能会降低性能!
来自以下问题:C ++ 11成员初始值设定项列表与类初始值设定项?我可以得出结论,这将是复制初始化语法:
obj s = obj("value");
Run Code Online (Sandbox Code Playgroud)
这将是直接初始化语法:
obj s{"value"};
Run Code Online (Sandbox Code Playgroud)
但是这个呢?
obj s = {"value"};
Run Code Online (Sandbox Code Playgroud)
还有这个:
obj s = obj{"value"};
Run Code Online (Sandbox Code Playgroud)
还有这个:
obj s("value");
Run Code Online (Sandbox Code Playgroud)
或者这个:
obj s = "value";
Run Code Online (Sandbox Code Playgroud)
注意
Bjarne Stroustrup在他的书“使用C ++编程,原理和实践”第二版,第311页,第9.4.2节中比较了一些初始化样式(但不是全部):
Run Code Online (Sandbox Code Playgroud)struct Date { int y,m,d; //year, month, day Date(int y, int m, int d); //check for valid date and initialize void add_day(int n); //increase the Date by n days };... …