小编jfs*_*jfs的帖子

打印subprocess.call结果

我试图用"Temp:"作为前缀在一个字符串中返回我的驱动器的温度.为此,我运行一个简单的脚本,用于将字符串与命令的输出连接起来.

import subprocess

command = "sudo smartctl -A /dev/sda | egrep Temperature_Celsius | awk '{print $10}'"

print "Temp " + str(subprocess.call(command, shell=True))
Run Code Online (Sandbox Code Playgroud)


结果:

29
Temp 0
Run Code Online (Sandbox Code Playgroud)


当我删除'print'行时,'29'也没有显示.因此,当我使用print语句时,脚本由于某种原因(?!)返回'29'然后返回0,而29实际上是正确的值.

我希望我能得到这个:

Temp: 29
Run Code Online (Sandbox Code Playgroud)

我试图使用os.system,并给出相同的结果.我也尝试将命令直接添加到"command = str(subprocess.call("但它给出了相同的结果.我已经阅读了os.system info页面和subprocess.call信息页面,我没有找到然后我用谷歌搜索AWK命令,也许它创建了一些疯狂的输出,但我找不到任何有用的东西.

Linux 2.7上的Python 2.7.0-34-通用#49-Ubuntu SMP Tue 11月12日18:00:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

python subprocess python-2.7

4
推荐指数
1
解决办法
3219
查看次数

Python需要更多时间来打印计算而不是执行计算

我在python中写了一个脚本,这让我感到惊讶.基本上,它需要五个20位数字,然后将它们相乘,然后将它们提升到3000的幂.时间模块用于查找计算计算所需的时间.好吧,当我运行这个脚本时,它说需要3*10 ^ -7秒来计算它.然后它生成一个文件output.txt,但脚本直到大约15秒后才会结束.

import timeit
outputFile = open("output.txt", "w")
start = timeit.default_timer()
x = (87459837581209463928*23745987364728194857*27385647593847564738*10293769154925693856*12345678901234567891)**3000
stop = timeit.default_timer()
time = stop-start
print "Time taken for the calculation was {} seconds".format(time)
outputFile.writelines(str(x))
outputFile.close()
y = raw_input("Press enter to exit.")
Run Code Online (Sandbox Code Playgroud)

这是否意味着打印280kb文件实际上需要花费更长的时间而不是执行计算?(我发现它不太可能.)

如果不是这样,那么python是否在调用变量x时执行计算?它是在每次计算变量时执行计算,还是将实际值存储在变量中?

我刚刚编写了另一个脚本,它确认将结果写入.txt文件需要python 0.03秒.那么,为什么python稍后会执行计算呢?

python variables performance numerical-computing

4
推荐指数
1
解决办法
2544
查看次数

什么时候需要F_GETFL fcntl命令的arg?

int fcntl(int fd, int command, ... /* arg */ );
Run Code Online (Sandbox Code Playgroud)

它是便携的:( flags = fcntl(fd, F_GETFL);注意:不arg)?

双方的LinuxFreeBSD的手册页说arg被忽略:

F_GETFL (void)
    Get the file access mode and the file status flags; arg
    is ignored.
Run Code Online (Sandbox Code Playgroud)

void在Linux文档中意味着arg不需要.

以下是POSIX中相关F_GETFD标志用法示例:

#include <unistd.h>
#include <fcntl.h>
...
    int flags;


    flags = fcntl(fd, F_GETFD);
    if (flags == -1)
        /* Handle error */;
    flags |= FD_CLOEXEC;
    if (fcntl(fd, F_SETFD, flags) == -1)
        /* …
Run Code Online (Sandbox Code Playgroud)

c unix linux freebsd fcntl

4
推荐指数
1
解决办法
5085
查看次数

以特殊格式打印当前UTC日期时间

很简单,但我是一个蟒蛇新手.我正在尝试使用特殊格式打印当前的UTC日期和时间:

Python 2.6.6

import datetime, time
print time.strftime("%a %b %d %H:%M:%S %Z %Y", datetime.datetime.utcnow())

TypeError: argument must be 9-item sequence, not datetime.datetime
Run Code Online (Sandbox Code Playgroud)

python datetime python-2.6 datetime-format

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

其中 Py_FileSystemDefaultEncoding 在 python 源代码中设置

我很好奇 python 源代码如何设置 Py_FileSystemDefaultEncoding 的值。我收到了一件奇怪的事情。

由于python doc about sys.getfilesystemencoding() 说:

在 Unix 上,根据 nl_langinfo(CODESET) 的结果,编码是用户的偏好,如果 nl_langinfo(CODESET) 失败,则为 None。

我使用 python 2.7.6

``

>>>import sys
>>>sys.getfilesystemencoding()
>>>'UTF-8'
>>>import locale
>>>locale.nl_langinfo(locale.CODESET)
>>>'ANSI_X3.4-1968'
Run Code Online (Sandbox Code Playgroud)

```
这里的问题是:为什么 getfilesystemencoding() 的值与 locale.nl_landinfo() 的值不同,因为文档说 getfilesystemencoding() 是从 locale.nl_landinfo() 派生的。

这是我终端中的语言环境命令输出:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
LC_TELEPHONE=zh_CN.UTF-8
LC_MEASUREMENT=zh_CN.UTF-8
LC_IDENTIFICATION=zh_CN.UTF-8
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

python locale python-2.7

4
推荐指数
1
解决办法
830
查看次数

Python对shell字符串的处理

我仍然不完全理解python的unicode和str类型是如何工作的.注意:我在Python 2中工作,据我所知,Python 3对同一问题有完全不同的方法.

我所知道的:

str 是一种较老的野兽,可以保存由历史迫使我们使用的太多编码之一编码的字符串.

unicode 是一种更标准化的方式来表示字符串使用一个巨大的表格,包括所有可能的字符,表情符号,狗屎的小图片等等.

decode函数将字符串转换为unicode,反之亦然encode.

如果我,在python的shell中,只需说:

>>> my_string = "some string"
Run Code Online (Sandbox Code Playgroud)

然后my_string是一个str编码的变量ascii(并且,因为ascii是utf-8的子集,它也被编码utf-8).

因此,例如,我可以unicode通过说出其中一行来将其转换为变量:

>>> my_string.decode('ascii')
u'some string'  
>>> my_string.decode('utf-8')
u'some string'  
Run Code Online (Sandbox Code Playgroud)

我不知道的是:

Python如何处理在shell中传递的非ascii字符串,并且知道这一点,保存单词的正确方法是"kožuš?ek"什么?

例如,我可以说

>>> s1 = 'kožuš?ek'
Run Code Online (Sandbox Code Playgroud)

在这种情况下s1成为str我无法转换为的实例unicode:

>>> s1='kožuš?ek'
>>> s1
'ko\x9eu\x9a\xe8ek'
>>> print s1
kožuš?ek
>>> s1.decode('ascii')

Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    s1.decode('ascii') …
Run Code Online (Sandbox Code Playgroud)

string unicode encoding utf-8 python-2.x

4
推荐指数
1
解决办法
896
查看次数

如何基于密钥合并两个元组列表?

我有两个需要合并的元组列表.这与数据库术语中的JOIN相当.每个列表中元组的顺序可能会改变.元组中项目的顺序不会改变.A中的项目数应该等于B中的数量,但可能存在差异.

这是我的两个元组列表.每个列表中将有10,000多个这样的元组,因此性能是一个问题.每个元组中的第一个元素是每个列表共有的键.

listA = [(u'123', u'a1', u'a2', 123, 789), (u'124', u'b1', u'b2', 456, 357), (u'125', u'c1', u'c2', 156, 852)]
listB = [(u'125', u'd1', u'N', u'd2', 1), (u'123', u'f1', u'Y', u'f2', 2)]
Run Code Online (Sandbox Code Playgroud)

所需的输出是:

listC = [(u'123', u'a1', u'a2', 123, 789, u'f1', u'Y', u'f2', 2), (u'125', u'c1', u'c2', 156, 852, u'd1', u'N', u'd2', 1)]
Run Code Online (Sandbox Code Playgroud)

这是我为测试这个概念而拼凑的代码.它可以工作,但正如你所看到的,性能是一个问题.使用真实数据运行时此代码的性能(每个列表中有10个项目)是不可接受的,因为它可能需要数小时才能完成.

这是代码:

for row in listA:
    for item in listB:
        if item[0] == row[0]:
            item = list(item)
            del item[0]
            row = list(row)
            merged.append(tuple(row + item))
Run Code Online (Sandbox Code Playgroud)

如何合并/加入这两个列表并获得更好的性能?

python algorithm python-2.7

4
推荐指数
1
解决办法
2858
查看次数

时间戳字符串(Unix时间)到datetime或pandas.Timestamp

从源代码我以JSON格式检索一些数据.我想将这些数据(及时测量)保存为文本文件.我反复想要使用相同的信号源并查看是否有新的测量值,如果是,我想将其添加到其他测量值.

我得到的数据如下:

{"xyz":[{"unixtime":"1458255600","time":"00:00","day":"18\/03","value":"11","paramlabel":"30-500 mHz","popupcorr":"550","iconnr":"7","paramname":"30-500 mHz"},{"unixtime":"1458256200","time":"00:10","day":"18\/03","value":"14","paramlabel":"30-500 mHz","popupcorr":"550","iconnr":"7","paramname":"30-500 mHz"},etc.]}
Run Code Online (Sandbox Code Playgroud)

我将这些数据加载到pandas DataFrame中,以便能够更轻松地使用它.但是,当我将其加载到数据框中时,所有列都被视为字符串.如何确保将unixtime列视为时间戳(以便我可以转换为日期时间)?

python datetime timestamp unix-timestamp pandas

4
推荐指数
1
解决办法
2468
查看次数

Python中的整数数组

我如何在Python代码中定义整数数组

说这个代码是否正常.或没有

pos = [int]

len = 99

for i in range (0,99):
    pos[i]=7
Run Code Online (Sandbox Code Playgroud)

python

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

浮点标准之间的转换

我正在尝试将基于 IEEE 的浮点数转换为 MIL-STD 1750A 浮点数。

我已附上两者的规格: 替代文本

我了解如何按照维基百科上的示例分解 IEEE 格式的浮点 12.375

但是,我不确定我对 MIL-STD 的解释是否正确。

12.375 = (12)b10 + (0.375)b10 = (1100)b2 + (0.011)b2 = (1100.011)b2 (1100.011)b2 = 0.1100011 x 2^4 => 指数,E = 4。

4 标准化 2 的补码 = (100)b2 = 指数

因此,MIL-STD 1750A 32 位浮点数为:

S=0, F=11000110000000000000000, E=00000100
Run Code Online (Sandbox Code Playgroud)

我的上述解释正确吗?

对于-12.375,只是交换符号位吗?IE:

S=1, F=11000110000000000000000, E=00000100
Run Code Online (Sandbox Code Playgroud)

或者小数部分会发生什么奇怪的事情吗?

c++ floating-point ieee-754

3
推荐指数
1
解决办法
2496
查看次数