标签: sys

在python中执行系统命令

我有使用perl编写脚本的经验,这使我可以通过使用反向标记来轻松执行linux命令.我想知道,我该怎么做这个Python?是否有一种特殊的方法来捕获命令(输出)的结果?

谢谢 :)

python sys

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

使用Windows 7中的默认程序打开PDF

我有一个程序,其中帮助文档位于与.py模块相同的文件夹中的.pdf中.我需要该程序使用系统的默认PDF阅读器打开.pdf.

我在我的程序中使用此代码:

if sys.platform.startswith('darwin'):
    os.system("SlannanHelp.pdf")
elif sys.platform.startswith('linux'):
    os.system("SlannanHelp.pdf")
elif sys.platform.startswith('win32'):
    os.filestart("SlannanHelp.pdf")
Run Code Online (Sandbox Code Playgroud)

但是,当在Windows 7中运行时,我收到以下错误:

回溯(最近通话最后一个):文件 "C:\用户\用户\ MousePaw游戏\ MousePaw实验室\ Slannan\Slannan.py",线1286,在help_event os.filestart( "SlannanHelp.pdf")AttributeError的: '模块'对象没有属性'filestart'

我的猜测是os.filestart可以在NT系统中运行,但不能在Windows 7中运行.是否有适用于Windows 7的命令,或者适用于Windows 7的命令?如果是后者,我如何检查用户是否正在运行NT或7版本的Windows?

提前致谢!

python file sys

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

使用sys.stdin获取多行输入

我有以下功能:

def getInput():
    # define buffer (list of lines)
    buffer = []
    run = True
    while run:
        # loop through each line of user input, adding it to buffer
        for line in sys.stdin.readlines():
            if line == 'quit\n':
                run = False
            else:
                buffer.append(line.replace('\n',''))
    # return list of lines
    return buffer
Run Code Online (Sandbox Code Playgroud)

在我的函数takeCommands()中调用,它被调用来实际运行我的程序.

但是,这没有任何作用.我希望将每一行添加到一个数组中,一旦一行=='退出',它就会停止用户输入.我都试过for line in sys.stdin.readlines()for line sys.stdin,但他们都没有注册任何我输入的(我运行它在Windows命令提示符).有任何想法吗?谢谢

python sys

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

如何将sys.argv [n]传递给Python中的函数

我试图将"sys.argv [1]"传递给一个函数.

#!/usr/bin/env/ python
import sys
def main():
    test(sys.argv[1])
def test(sys.argv[1]):
    print "Hello " + sys.argv[1]

./arg.py World

File "./arg.py", line 5
def test(sys.argv[1]):
            ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

在将Interwebs分散几个小时后,不确定从哪里开始.我也尝试将"sys.argv [1]"设置为一个变量并尝试将其传递给函数但仍然无效.

python function sys argv

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

在 mac 上覆盖 python 3.x 中的打印行

我正在尝试编写一个涉及使用硬币翻转、正面或反面的程序,但它会打印“正面”然后被“反面”替换并继续这样做直到它决定答案。

目前,当我运行程序时,它每次都会在下一行打印“头”或“尾”。这发生在空闲和终端上。

我试过使用回车 (\r)、退格 (\b) 和 sys.stdout.write() 和 .flush() 但都没有工作,它只是在下一行继续打印。

有没有其他方法可以擦除已打印的内容,或者我可以使用其他软件吗?这是我的代码:

import time
import random

offset = random.randint(0,1)

for i in range (0, 20+offset):
    if i % 2 == 0:
        print("Heads")
    else:
        print("Tails")
    print("\r")
    time.sleep(0.1)
Run Code Online (Sandbox Code Playgroud)

python macos carriage-return sys

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

sys.exitfunc无法在python中工作

我试图运行以下简单的代码

import sys

print("Starting Test Python Module");

def testmethod():
    print("From test method")

sys.exitfunc = testmethod
print("Terminating Test Python Module");
Run Code Online (Sandbox Code Playgroud)

它打印出来

C:\Users\athakur\Softwares>python test.py
Starting Test Python Module
Terminating Test Python Module
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么它不打印"从测试方法"

使用atexit可以正常工作

import atexit

print("Starting Test Python Module");

def testmethod():
    print("From test method")

atexit.register(testmethod)
print("Terminating Test Python Module");
Run Code Online (Sandbox Code Playgroud)

输出

C:\Users\athakur\Softwares>python test.py
Starting Test Python Module
Terminating Test Python Module
From test method
Run Code Online (Sandbox Code Playgroud)

python atexit sys shutdown-hook

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

将sys.stdout作为参数传递给进程

我传递"sys.stdout"作为进程的参数,然后进程在执行其内容时写入"sys.stdout".

import multiprocessing
import sys
def worker_with(stream):
    stream.write('In the process\n')

if __name__ == '__main__':
    sys.stdout.write('In the main\n')
    lock = multiprocessing.Lock()

    w = multiprocessing.Process(target=worker_with, args=(sys.stdout,))

    w.start()
    w.join()
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,它返回以下错误:"ValueError:关闭文件上的操作".

我尝试运行相同的代码,但直接调用该函数而不是生成一个进程,它工作,它打印到控制台.我也尝试运行相同的代码,但直接在函数内部调用sys.stdout,将其作为一个进程生成它并且它可以工作.问题似乎是将sys.stout作为进程的参数传递.

有人知道为什么吗?

注意:此代码的灵感来自教程PYMOTW - 进程之间的通信.

编辑:我在Windows7上运行Python 2.7.10,32位.

python stdout multiprocessing sys

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

CAPL脚本中系统变量和环境变量之间有什么区别?

CAPL脚本中的系统变量和环境变量之间有什么区别?

env var sys capl difference

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

Python:打印所有argparse参数,包括默认值

我想记录使用argparse模块的python程序的用法.目前,该记录器记录类似于给出的答案在命令行中使用这个职位.但是,这仅提供命令行参数,并且不包括稍后在argparse中设置的默认值(毕竟这是预期用途).有没有一种简单的方法来打印所有argparse选项来创建一个usage包含默认值的漂亮,整洁的日志条目?

进入argparse命名空间以按名称获取每个参数并不困难,但我希望有人能够以简洁的方式提取所需的信息.

任何方向表示赞赏!

python logging namespaces sys argparse

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

如何在ubuntu中查看syslog?

跟进此问题,LogBack Syslog无法正常工作

我使用下面的命令syslogubuntu16.04中查看,但得到以下结果。这是正确的观看方式吗?

user@xxx:~$ tail -f /var/log/syslog Jun  6 23:08:50 xxx systemd[1]:
Starting Hostname Service... Jun  6 23:08:50 xxx dbus[889]: [system]
Successfully activated service 'org.freedesktop.hostname1' Jun  6
23:08:50 xxx systemd[1]: Started Hostname Service. Jun  6 23:09:41 xxx
gnome-session[2645]: (nautilus:2860): Gtk-WARNING **: Attempting to
read the recently used resources file at
'/home/xxx/.local/share/recently-used.xbel', but the parser failed:
Failed to open file '/home/xxx/.local/share/recently-used.xbel':
Permission denied. Jun  6 23:09:41 xxx org.gtk.vfs.Daemon[2508]:
(gvfsd-recent:15282): Gtk-WARNING **: Attempting to read the recently …
Run Code Online (Sandbox Code Playgroud)

java linux ubuntu logging sys

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