Szkriptek: Python, Perl, Bash, ...

Gimp "script-fu" kötegelt futtatása parancssorban

Sziasztok.

Egy Gimp-re írt, remekül működő, "hdr-eff.scm" nevű scriptet szeretnék rengeteg fájlon végrehajtani paraméterek nélkül.
( http://registry.gimp.org/node/11776 )

Így próbálkoztam:

gimp --no-data \
--no-fonts \
--no-interface \
-b '(hdr-eff.scm "./fajl.jpg_original")' '(gimp-quit 0)'

A script elindult, de valahol megállt:

(gimp:16759): GLib-GObject-WARNING **: g_object_set_valist: object class 'GeglConfig' has no property named 'cache-size'

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA777768 from "gimp:point-layer-mode" to "gimp:dissolve-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA7779E8 from "gimp:point-layer-mode" to "gimp:behind-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA777C00 from "gimp:point-layer-mode" to "gimp:multiply-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA777E10 from "gimp:point-layer-mode" to "gimp:screen-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778218 from "gimp:point-layer-mode" to "gimp:overlay-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778430 from "gimp:point-layer-mode" to "gimp:difference-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778670 from "gimp:point-layer-mode" to "gimp:addition-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA7788B8 from "gimp:point-layer-mode" to "gimp:subtract-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778AD8 from "gimp:point-layer-mode" to "gimp:darken-only-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778CF8 from "gimp:point-layer-mode" to "gimp:lighten-only-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778EF0 from "gimp:point-layer-mode" to "gimp:hue-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779120 from "gimp:point-layer-mode" to "gimp:saturation-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779340 from "gimp:point-layer-mode" to "gimp:color-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779540 from "gimp:point-layer-mode" to "gimp:value-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779758 from "gimp:point-layer-mode" to "gimp:divide-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA7799B8 from "gimp:point-layer-mode" to "gimp:dodge-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779BD0 from "gimp:point-layer-mode" to "gimp:burn-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779E18 from "gimp:point-layer-mode" to "gimp:hardlight-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A010 from "gimp:point-layer-mode" to "gimp:softlight-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A268 from "gimp:point-layer-mode" to "gimp:grain-extract-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A480 from "gimp:point-layer-mode" to "gimp:grain-merge-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A6A8 from "gimp:point-layer-mode" to "gimp:color-erase-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A8C8 from "gimp:point-layer-mode" to "gimp:erase-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77AAD0 from "gimp:point-layer-mode" to "gimp:replace-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77B238 from "gimp:point-layer-mode" to "gimp:anti-erase-mode"
batch command experienced an execution error:
Error: ( : 165519496) eval: unbound variable: hdr-eff.scm

Aztán áll, visszaadott prompt sincs.

Valamit rosszul csinálok?

[változott] Python, TCP, 4 byte küldése, endianness, C#

új infó a topicnyitó végén

Ajaj, próbáltam a címet erősen zanzásítani... :)

Sziasztok!

Amin ügyködök, a következő.
Van ez a szoftver, telefonra, illetve egy TCP szerver váza C#-ban, az alábbi oldalon:
http://philip.daubmeier.de/sensoremitter/

Az Win-es telefonról küldi TCP-n a szenzoradatokat a pc-re.

Van ez a szoftver:
https://github.com/ianovir/HIMUServer

Ami úgy tűnik, némi módosítás után alkalmas lehetne arra, hogy fogadjam az adatokat a Windows-os telefonról.

Azzal küzdök, hogy a C# forrás szerint küldeni kellene a telefonon futó "kliens"-nek egy MagicNumbert TCP-n, amit át kellene alakítani Big Endianná, hogy a hálózaton biztos rendben érkezzen meg.
A kliens forrása zárt, az csak a Win Store-ból tölthető le.

Namost Pythonban (3-ast "használok") a

socket.htons

csak 2 byteot cserél, meg a pack is, nem pedig négyet...

...és itt a biológus agyam elvesztette a fonalat, segítséget kell kérnem... :)

Értem én, hogy lesznek más bajok is majd, de itt leragadtam.

A socket nyitva, beszélek is a telefonhoz, de az szól, hogy valami a másik oldalon nem kóser (nézzem meg, hogy tűzfal nem blokkol-e, esetleg szó nélkül kilép (itt gondolom valamilyen nem kezelt kivétel történik)).

A python szerver releváns részei itt lejjeb. A gányolás látszik... :)


import socket
import math
from struct import *
import sys

timeout = 10  #timeout in seconds
bufferSize = 1024 #bytes
MagicNumber = 0x42fea723 # Big Endian int32 http://www.scadacore.com/field-tools/programming-calculators/online-hex-converter/
#MagicNumber = 0x23a7fe42 # Little Endian int32
#packSeparator="#"
packSeparator=""
go=True;
.
.
.

def executeTCP(port):
	'''
	Performs data acquisition via TCP protocol
	'''
	sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	sock.settimeout(timeout)
	serverAddress = ('', port)
	sock.bind(serverAddress)
	sock.listen(1)
	print ('waiting for connection')
	[connection, clientAddress] = sock.accept()
	print ('Sending magic number')
	print ("MagicNumber type: ", type(MagicNumber).__name__)
	print ("MagicNumber size: ",  sys.getsizeof(MagicNumber))
	#magicnum = pack('i', bytearray.fromhex(hex_string))
	magicnum_2 = pack("!I", MagicNumber)
	print ("magicnum_2: ", magicnum_2)
	print ("magicnum_2 type: ", type(magicnum_2).__name__)
	sock.send(magicnum_2)			# http://stackoverflow.com/questions/8904092/how-can-i-send-anything-other-than-strings-through-python-sock-send
	connection.setblocking(1)
	print ('connection from ' + str(clientAddress))
	while go:
		data = connection.recv(bufferSize)	
		if not data: break
		printSensorsData(data.decode("utf-8"))
	connection.close()		

.
.
.

szerk:
Úgy tűnik, wireshark-kal belehallgatva a beszélgetésbe, hogy a python szerver hallgat, a 2 eszköz között pontosan 0 byte információ közlekedik. Mármint persze a syn-ack pároson kívül. :)
Magyarul nem küldi el a stringet a szerver.
Erős a gyanúm, de itt tényleg kezdek kidőlni, hogy nem jó helyen próbálom küldeni az adatokat.
Olvasgatok, de kezdek elveszni.
A Python doksik szerint ha (mondjuk TCP) szervert szeretnék, a socket.bind, .listen, .accept kell.
Ha kliens akarok lenni, az is megvan. (mármint legalábbis a doksikban :))

De azt nem értem, hogy ha én szerverként szeretnék létezni, de el szeretnék küldeni egy stringet 4 byte-ot a kliensnek (mondjuk a már felépített kapcsolaton keresztül), akkor most szerver vagyok, kliens, vagy rohadt sokat kellene még olvasnom...? :)

Komolyan: ha valaki segítene ebben az ügyben, megköszönném! :)

Config fájl adat keresése és szerkesztése

Lenne egy kis busybox-os linux, tehát nem minden parancs/eszköz áll rendelkezésre, vagy azok nem minden funkciójukkal.
Configurációs fájlokat szeretnék szerkeszteni, egyfajta alapbeállításhoz használatos scriptet csinálni. Több helyen vannak fájlok amikben érdemesebb lenne egyszerre kényelmesen módosítanom paramétereket.
Van már olyan amit sikerült keresnem és szerkesztenem, viszont elakadtam az alábbi konfigurációs fájl struktúránál.


[node]
label          = abcd
user           = usr1

[node]
label          = efgh
user           = usr2

Az "abcd" node-ban kellene kiolvasnom az user-t és megváltoztatnom.

Szívesen veszek minden javaslatot.

PowerShell ékezetes szöveg formon

Sziasztok!

PowerShellben (4) szeretnék egy ékezetes szövegű gombot, de így zagyvaságokat ír. Hogy kell ezt?

Add-Type -AssemblyName System.Windows.Forms
$form = New-Object Windows.Forms.Form
$btn = New-Object System.Windows.Forms.Button

$btn.Text = "Hűtőgép"
$form.Controls.Add($btn)

$ret = $form.ShowDialog()

szaszi

Scripting - Összes lehetőség több tömböt keverve változó mérettel és egy tömb több elemével

Sziasztok,

Elsősorban PowerShell-ben szeretném megoldani az alábbi feladatot - de lassan ott járok bármi jó lesz:

Adottak:
tömb1: { "Egyes", "Kettes", "Hármas", "Négyes", "Ötös" }
tömb2: { "Alma", "Körte", "Dinnye" }
tömb3: { "Virág", "Kert", "Ásó", "Szilva", "Tök" }
tömb4: { "Valami", "Valami2", "Valami3" }

- Amint látható, mind a négy tömb változó méretű
- mind string lesz egyébként
- Term. nem ezekkel az adatokkal, ékezetekkel és változónevekkel persze.

A kérdés amit meg szeretnék oldani:
- Létrehozni egy n elemű tömböt, amely tömb mindegyik tömb legalább egy elemét a fentinek tartalmazza, de tömb3 elemei többször is szerepelhetnek.

Tehát pl. lehetséges az, hogy az egyik megoldás: { "Egyes", "Dinnye", "Virág", "Kert", "Tök", "Valami2" } - azaz csak a tömb3 elemei szerepelhetnek többször mint 1, a többi csak egyszer, de legalább egyszer szerepelj.

A C#-ban rátaláltam én a CartesianProduct class definíciójára, néztem is már, de kissé vakartam a fejem a feltétel és a nem egyező méret miatt

Valakinek van-e erre ötlete?

LibreOffice Writer és Calc PHP-val/Python-nal

Sziasztok!

Keresgélek, de értelmes/értelmezhető megoldást nem találtam eddig. Lényegében adatbázis tartalma alapján .doc és .xls állományokat kell készítenem. LAMP környezet, adatsorok szépen rendelkezésre állnak, csak a számuk változó, a követelmény pedig az, hogy egy oldalra férjenek ki. Unom a kézi formázást, és arra gondoltam, PHP-ban csak van olyan könyvtár, amivel .doc állományt lehet gyártani. Akadt, de az UTF-8 karaktereket nem szerette.

Az a kérdésem, hogy PHP-ból (vagy PHP alól meghívott Python programmal) hogyan tudok .doc, .xls állományokat gyártani, a megfelelő formázásokkal? Tudtok-e működő könyvtárakról, vagy akár a Writer és a Calc közvetlen vezérlésének módszeréről. Odáig jutottam, hogy mintha lehetne a LibreOffice-t headless módban indítani, na de hogyan tovább?

Továbbá még nyitott kérdés, hogyan adok át PHP-ból adatokat, tömböket a Python-nak - ha ez az út járható a dokumentumok létrehozásához.

Üdv, Cözi

Udev szabály bénázás

Sziasztok!

Írtam egy udev szabályt, hogy egy nyomtató mindig létrehozzon egy symlinket az eszközre, ezáltal megszólíthatóvá téve azt. Így néz ki:
SUBSYSTEM=="usb", ATTRS{serial}=="54J135300878", SYMLINK+="zebricsku"

Asztali gépemen szépen működik is, ez egy Ubuntu 12.04. Viszont a cél gépen, amin egy 15.10 fut, azon nem akar.
Kérdésem az lenne, hogy van még valami beállítás az udev-ben, amiről nem tudok és esetleg amiatt nem működik a szabály?

Köszönöm!

Kernel készítő készítés

Sziasztok !

Szeretném továbbfejleszteni a kernel forgató kis scrip-et. Az első változat jól működik, csak szeretnék kicsit "többet tudóvá" tenni. Egész pontosan a menüvel vagyok elakadva. Ez itt a menü része a script-ből https://pastebin.com/1EWk6Mth

Azt szeretném, ha elvégezte a letöltést akkor térjen vissza a menümbe. Jelenleg a letöltés után kilép a programból. Hogyan tudnék olyan menüt készíteni, ahol egy feladat elvégzése után nem lép ki a programból? Csak akkor ha én szeretném.

elakdtam a bash szkriptben

Hogyan tudnám megoldani bash szkriptben a következőt?
Egy beépülő fájlt telepítettem fel egy adott útvonalra, mappába.
Innen linkelnem kellene adott helyzettől függően 1,2 vagy 3 helyre.

Ott akadtam el hogy minként menjen tovább a szkript ha ki kell hagynia valamit?

Így kezdtem neki

Van kettő szubrutin.
Az első azt ellenőrzi hogy létezik-e az adott program amelynek szüksége lenne a beépülőre.
A másik hogy létezik-e az a mappa ahová be kell linkelni a beépülőt. Ha nem létezik, akkor létrehozza.

Eddig működik is. Ott akadtam el, hogy ...


Változók beállítása

app_szubrutin
if ! [ -x "/usr/bin/${app}" ]; then (tudom, az else ág az igaz.)

link_szubrutin
if ! [ -d ${link_path} ]; then

program1=/útvonal/
link útvonal
ugrás app_szubrutinra
ugrás link_szubrutinra

program2=/útvonal/
link útvonal
ugrás app_szubrutinra
ugrás link_szubrutinra

program3=/útvonal/
link útvonal
ugrás app_szubrutinra
ugrás link_szubrutinra

... mi van ha a program1 vagy éppen a program2 esetleg mindkettő nincs is feltelepítve?
Hogy léptetem tovább? Vagy csak nyomjam el a hibaüzeneteket a /dev/null-ba?